2013-02-07 31 views
14

我有一个简单的GridPane显示几个标签和一个按钮,但我似乎无法得到它适合父母StackPane。我将如何前行并使其充满它所装的任何集装箱?JavaFX - 获取GridPane以适合父母

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真的不是我的专长,任何帮助,将不胜感激。

回答

0

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

+0

我知道,但通过设置它不”首选大小t将它缩放到父母身上,它只是设置了FX将尝试使用的大小,但我会尝试将其设置为HBox,尽管我很难相信这可以解决我的问题,因为它不会重新调整其他项目的大小像按钮等...但我会尝试^^ –

+0

很抱歉这么说,但是HBox或VBox对GridPanes大小有任何影响,就像使其填充父项一样。 –

+0

@JohnMikaelGundersen尝试像这样并相应地调整您的网格约束。 [链接] http://pastebin.com/rA0Ch8ET –

0

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

root.setStyle("-fx-background-color: yellow;"); 
g.setStyle("-fx-border-color: blue;"); 
+0

它并没有扩展到父母,据我所见 –

+0

GridPane不知道如何重新分配额外的宽度和高度。你需要定义它。你想要第一行占用所有额外的垂直空间,第二列占用所有额外的水平空间吗?你有没有考虑过使用TableView? – ytw

10

你应该可以看到这个link,尤其是约百分比来调整的一部分。如果你只有两列,我发现代码工作:

GridPane grid = new GridPane(); 
/* your code */ 
ColumnConstraints column1 = new ColumnConstraints(); 
column1.setPercentWidth(50); 
grid.getColumnConstraints().add(column1); 
+1

这绝对有效。我开车疯了,因为我的天窗不适合父母,但现在它确实如此。还有一个提示:即使超过两个库仑也可以工作,只需调整相应的值即可! –

+0

谢谢,我在回答中添加了注释。 – Videl

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

有了这个设置网格占用窗口的所有空间,并自动调整窗口大小。

3

我们假设你的布局有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>