gpt4 book ai didi

java - 如何让 GridPane 填满整个场景? (带有 Eclipse Luna 的 JavaFX SceneBuilder)

转载 作者:行者123 更新时间:2023-11-30 08:05:25 24 4
gpt4 key购买 nike

I found this answer but it seems to be outdated or not applicable to my situation.

我(和我类的其他同学)正在尝试调整我的 GridPane 的大小以填充整个场景。这是它现在在 SceneBuilder 中的样子:

GridPane doesn't fill full scene?

如果您看不到图像:它只是一个 3x3 GridPane 的图像(我的层次结构中的唯一元素),以及 GridPane 周围剩余场景的“灰色空间”。

这是我的主要代码:

    package pkgTicTacToe;

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.GridPane;
import javafx.fxml.FXMLLoader;


public class Main extends Application {

@Override
public void start(Stage primaryStage) {
try {
GridPane root = (GridPane)FXMLLoader.load(getClass().getResource("ticTacToe.fxml"));
Scene scene = new Scene(root,400,400);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}

public static void main(String[] args) {
launch(args);
}
}

这是我的 Controller 代码:

package pkgTicTacToe;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.GridPane;

public class ticTacToeController implements Initializable {

@FXML
private GridPane root;

@Override
public void initialize(URL arg0, ResourceBundle arg1) {
Image imageX = new Image(getClass().getResource("/pkgTicTacToe/x.gif").toExternalForm());
Image imageO = new Image(getClass().getResource("/pkgTicTacToe/o.gif").toExternalForm());
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
int status = (int)(Math.random() * 3 );
if (status == 0) {
root.add(new ImageView(imageX), j, i);
}
else if (status == 1) {
root.add(new ImageView(imageO), j, i);
}
}

}

}
}

这是我的 .fxml 文件中的代码(在我们的类中,我们不直接“弄乱”.fxml,我们通过 SceneBuilder 操作这些元素,并且大部分代码在 Controller 中):

<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.GridPane?>

<GridPane fx:id="root" alignment="CENTER" gridLinesVisible="true" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="301.0" prefWidth="465.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="pkgTicTacToe.ticTacToeController">
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" />
<RowConstraints minHeight="10.0" prefHeight="30.0" />
<RowConstraints minHeight="10.0" prefHeight="30.0" />
</rowConstraints>
<columnConstraints>
<ColumnConstraints minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
</GridPane>

我已经尝试在右侧操纵属性、布局和代码的所有不同元素,并浏览了顶部的菜单选项——似乎没有办法让这个傻瓜适合!我想过创建一个 AnchorPane 来将 GridPane 放在里面,但这绕过了我的问题,而不是真正找到解决方案。

为了我类(class)的其余部分,我更喜欢以使用 SceneBuilder 为导向的答案。但是,如果您还包含一个代码方法,我也会很高兴,因为我个人更喜欢减少使用 GUI 的时间,而更直接地使用键盘。

感谢您抽出宝贵的时间,如果我遗漏了任何细节或者我自己没有做足够的研究来找到类似的问题,我深表歉意。

最佳答案

场景的根元素将始终填充整个场景,因此当您运行应用程序时,您的网格 Pane 将填充场景。 (只需尝试在其上添加背景颜色即可。)但是,网格 Pane 本身包含空白区域。 (您在 SceneBuilder 中看到的当然是非常随意的,因为 SceneBuilder 只知道 FXML,并且场景本身是在外部定义和调整大小的。)

您可能真正要问的是如何使网格 Pane 的内容填充网格 Pane (即您希望列占据它们之间网格 Pane 的所有宽度)。请注意,您已将所有三列的首选宽度设置为 100;由于您的场景宽度为 400,因此会留下 100 像素的未使用空间。 (与行类似。)

删除列约束的 prefWidth 设置,并将所有列约束设置为具有 ALWAYShgrow 值。 (与行、prefHeightvgrow 类似。)

关于java - 如何让 GridPane 填满整个场景? (带有 Eclipse Luna 的 JavaFX SceneBuilder),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35065429/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com