Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaFX-获取网格窗格以适应父级_Java_User Interface_Resize_Javafx 2_Gridpanel - Fatal编程技术网

JavaFX-获取网格窗格以适应父级

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,其中显示了几个标签和一个按钮,但我似乎无法使它与父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.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不适合父母,所以我开车很疯狂,但现在它适合了。还有一点需要注意的是:即使使用两个以上的计算器,也可以这样做,只需相应地调整数值!谢谢,我在答案上加了你的便条。