JavaFX-获取网格窗格以适应父级
我有一个简单的GridPane,其中显示了几个标签和一个按钮,但我似乎无法使它与父StackPane匹配。我怎样才能使它充满所有的容器呢JavaFX-获取网格窗格以适应父级,java,user-interface,resize,javafx-2,gridpanel,Java,User Interface,Resize,Javafx 2,Gridpanel,我有一个简单的GridPane,其中显示了几个标签和一个按钮,但我似乎无法使它与父StackPane匹配。我怎样才能使它充满所有的容器呢 GridPane g = new GridPane(); g.add(new Label("Categories"),0,0); g.add(new Label("Content"),1,0); Button newCat = new Button("New Category"); newCat.setO
GridPane g = new GridPane();
g.add(new Label("Categories"),0,0);
g.add(new Label("Content"),1,0);
Button newCat = new Button("New Category");
newCat.setOnAction(new EventHandler<ActionEvent>() {
@Override public void handle(ActionEvent e) {
System.out.println("Clicked");
}
});
g.add(newCat,0,1);
g.setGridLinesVisible(true);
StackPane root = new StackPane();
root.getChildren().add(g);
Scene scene = new Scene(root, 300, 250);
primaryStage.setScene(scene);
primaryStage.show();
GridPane g=new GridPane();
g、 添加(新标签(“类别”),0,0;
g、 添加(新标签(“内容”),1,0;
按钮newCat=新按钮(“新类别”);
setOnAction(neweventhandler()){
@重写公共无效句柄(ActionEvent e){
System.out.println(“单击”);
}
});
g、 添加(新类别,0,1);
g、 setGridLinesVisible(真);
StackPane root=新的StackPane();
root.getChildren().add(g);
场景=新场景(根,300,250);
初级阶段。场景(场景);
primaryStage.show();
UI真的不是我的强项,任何帮助都将不胜感激 与其将GridPane放入StackPane,不如将GridPane添加到HBox或VBox中。调整网格窗格更方便。顺便说一句,您仍然有一些方法,如g.setPrefSize(arg0,arg1);设置相应的高度和宽度。虽然不明显,但我认为您的GridPane已经和其父容器一样大了。 如果在“Scene Scene=new Scene(root,300250);”之前添加以下两行代码,您应该能够看到发生了什么
root.setStyle("-fx-background-color: yellow;");
g.setStyle("-fx-border-color: blue;");
您应该看到这一点,尤其是关于百分比大小调整的部分。如果您只有两列,我发现代码可以工作:
GridPane grid = new GridPane();
/* your code */
ColumnConstraints column1 = new ColumnConstraints();
column1.setPercentWidth(50);
grid.getColumnConstraints().add(column1);
如果有人在寻找答案,我就是这么想的:
@Override
public void start(Stage stage) throws Exception {
stage.setTitle("Window title");
GridPane grid = new GridPane();
gridSetup(grid); // Building my grid elements here (2 columns)
// Setting columns size in percent
ColumnConstraints column = new ColumnConstraints();
column.setPercentWidth(30);
grid.getColumnConstraints().add(column);
column = new ColumnConstraints();
column.setPercentWidth(70);
grid.getColumnConstraints().add(column);
grid.setPrefSize(WINDOW_WIDTH, WINDOW_HEIGHT); // Default width and height
grid.setMaxSize(Region.USE_COMPUTED_SIZE, Region.USE_COMPUTED_SIZE);
Scene scene = new Scene(grid, WINDOW_WIDTH, WINDOW_HEIGHT);
stage.setScene(scene);
stage.show();
}
使用此设置,网格将占用窗口的所有空间,并随窗口自动调整大小。假设您的布局有2列和3行,您可以逐个定义列和行的大小属性:
<GridPane
xmlns:fx="http://javafx.com/fxml/1"
id="gridPane"
prefHeight="768.0"
prefWidth="1024.0">
<gridLinesVisible>true</gridLinesVisible>
<columnConstraints>
<ColumnConstraints percentWidth="20" />
<ColumnConstraints percentWidth="80" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="50"/>
<RowConstraints percentHeight="80"/>
<RowConstraints minHeight="50"/>
</rowConstraints>
</GridPane>
真的
我知道,但通过设置首选大小,它不会将其缩放到父级,它只是设置了FX将尝试使用的大小,但我会尝试将其放在HBox上,尽管我很难相信这会解决我的问题,因为它不会重新调整按钮等其他项目的大小。。。但是我会尽力^^^很抱歉这么说,但是HBox或VBox对网格窗格的大小有任何影响,就像让它填充父对象一样。@JohnMikaelGundersen尝试这样做,并相应地调整网格约束。[link]据我所知,它不能缩放到父级GridPane不知道如何重新分配额外的宽度和高度。你需要定义它。是否希望第一行占用所有额外的垂直空间,第二列占用所有额外的水平空间?你考虑过使用TableView吗?这绝对有效。因为我的gridpane不适合父母,所以我开车很疯狂,但现在它适合了。还有一点需要注意的是:即使使用两个以上的计算器,也可以这样做,只需相应地调整数值!谢谢,我在答案上加了你的便条。