我有一个简单的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();
用户界面真的不是我的强项,任何帮助都会受到赞赏。
答案 0 :(得分:12)
您应该看到此link,尤其是关于百分比调整的部分。如果您只有两列,我发现代码可以工作:
GridPane grid = new GridPane();
/* your code */
ColumnConstraints column1 = new ColumnConstraints();
column1.setPercentWidth(50);
grid.getColumnConstraints().add(column1);
答案 1 :(得分: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();
}
通过此设置,网格占据窗口的所有空间,并随窗口自动调整大小。
答案 2 :(得分: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>
答案 3 :(得分:0)
而不是将GridPane放在StackPane中,您应该在HBox或VBox中添加GridPane。调整Gridpane更方便。顺便说一下,你还有一些方法,比如g.setPrefSize(arg0,arg1);相应地设置你的身高和宽度。
答案 4 :(得分:0)
虽然不是很明显,但我认为你的GridPane已经和它的父容器一样大了。 如果在“场景场景=新场景(root,300,250);”之前添加以下2行代码,您应该能够看到正在发生的事情。
root.setStyle("-fx-background-color: yellow;");
g.setStyle("-fx-border-color: blue;");