javafx GridPane

示例

GridPane 在行和列的灵活网格内布置其子项。

GridPane的子级

子项可以放置在内的任何位置,GridPane并且可以跨越多个行/列(默认范围为1),并且其在网格内的位置由其布局约束定义:

约束描述
columnIndex

子级布局区域开始的列。

rowIndex

子布局区域开始的行。

columnSpan

子布局区域水平跨越的列数。

行跨度

子布局区域垂直跨越的行数。

不需要预先指定行/列的总数,因为网格窗格将自动扩展/收缩网格以容纳内容。

将子项添加到GridPane

为了将new添加Node到GridPane,应使用类的静态方法设置对子项布局约束GridPane,然后可以将这些子项添加到GridPane实例。

GridPane gridPane = new GridPane();

// 设置约束:第一行和第一列
Label label = new Label("Example");
GridPane.setRowIndex(label, 0);
GridPane.setColumnIndex(label, 0);
// 将孩子添加到网格
gridpane.getChildren().add(label);

GridPane 提供组合这些步骤的便捷方法:

gridPane.add(new Button("按我!"), 1, 0); // 列= 1行= 0

该GridPane班还提供静态的setter方法来设置行和columnspan子元素:

Label labelLong = new Label("Its a long text that should span several rows");
GridPane.setColumnSpan(labelLong, 2);
gridPane.add(labelLong, 0, 1);  // 列= 0行= 1

列和行的大小

默认情况下,行和列的大小将适合其内容。在有必要的情况下的行和列大小的明确的控制,RowConstraints和ColumnConstraints实例可以被添加到GridPane。添加这两个约束将调整上面示例的大小,以使第一列为100像素,第二列为200像素长。

gridPane.getColumnConstraints().add(new ColumnConstraints(100));
gridPane.getColumnConstraints().add(new ColumnConstraints(200));

默认情况下,GridPane即使网格窗格的大小大于其首选的大小,它们也会将行/列的大小调整为它们的首选大小。为了支持动态列/行大小,两个contstaints类都提供了三个属性:最小大小,最大大小和首选大小。

另外ColumnConstraints提供setHGrow并RowConstraints提供setVGrow了影响增长和收缩优先级的方法。三个预定义的优先级是:

  • Priority.ALWAYS:始终尝试增大(或缩小),并与其他具有增大(或缩小)的布局区域共享空间的增大(或减小)。

  • Priority.SOMETIMES:如果没有其他布局区域始终设置为“增长”(或“缩小”),或者这些布局区域没有吸收所有增加(或减少)的空间,则将与其他布局区域的时间。

  • Priority.NEVER:当区域中可用空间增加(或减少)时,布局区域将永远不会增长(或缩小)。

ColumnConstraints column1 = new ColumnConstraints(100, 100, 300);
column1.setHgrow(Priority.ALWAYS);

上面定义的列的最小大小为100像素,它将始终尝试增长直到达到最大300像素宽度。

也可以定义行和列的百分比大小。以下示例定义了一个GridPane位置,其中第一列填充网格窗格宽度的40%,第二列填充网格窗格宽度的60%。

GridPane gridpane = new GridPane();
ColumnConstraints column1 = new ColumnConstraints();
column1.setPercentWidth(40);
ColumnConstraints column2 = new ColumnConstraints();
column2.setPercentWidth(60);
gridpane.getColumnConstraints().addAll(column1, column2);

网格单元内元素的对齐

Node可以通过使用class的setHalignment(水平)方法和ColumnConstraintsclass的setValignment(垂直)方法来定义s的对齐方式RowConstraints。

ColumnConstraints column1 = new ColumnConstraints();
column1.setHalignment(HPos.RIGHT);

RowConstraints row1 = new RowConstraints();
row1.setValignment(VPos.CENTER);