17

我有一个简单的 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();

UI 真的不是我的强项,任何帮助都将不胜感激。

4

5 回答 5

13

你应该看到这个链接,尤其是关于百分比大小的部分。如果您只有两列,我发现该代码可以工作:

GridPane grid = new GridPane();
/* your code */
ColumnConstraints column1 = new ColumnConstraints();
column1.setPercentWidth(50);
grid.getColumnConstraints().add(column1);
于 2013-11-02T17:39:01.473 回答
8

万一有人在寻找答案,这就是它对我的工作方式:

@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();
}

使用此设置,网格会占用窗口的所有空间并随窗口自动调整大小。

于 2014-05-19T20:05:09.503 回答
4

假设您的布局有 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>
于 2016-08-31T05:34:07.667 回答
1

虽然不明显,但我认为您的 GridPane 已经与其父容器一样大。如果在“Scene scene = new Scene(root, 300, 250);”之前添加以下两行代码,应该可以看到发生了什么。

root.setStyle("-fx-background-color: yellow;");
g.setStyle("-fx-border-color: blue;");
于 2013-02-10T03:47:13.260 回答
0

与其将 GridPane 放在 StackPane 中,不如将 GridPane 添加到 HBox 或 VBox 中。调整 Gridpane 更方便。顺便说一句,您仍然有一些方法,例如 g.setPrefSize(arg0, arg1); 相应地设置您的高度和宽度。

于 2013-02-08T18:24:52.870 回答