GridPane
GridPane
在一个灵活的行和列网格中展示它的孩子。
GridPane 的孩子们
子项可以放在 GridPane
中的任何位置,并且可以跨越多行/列(默认跨度为 1),并且它在网格中的位置由其布局约束定义:
约束 | 描述 |
---|---|
columnIndex |
子项布局区域开始的列。 |
rowIndex |
子项布局区域开始的行。 |
columnSpan |
子项布局区域水平跨越的列数。 |
ROWSPAN |
子项布局区域垂直跨越的行数。 |
不需要预先指定行/列的总数,因为 gridpane 将自动扩展/收缩网格以容纳内容。
将子项添加到 GridPane
为了向 GridPane
添加新的 Node
s,应该使用 GridPane
类的静态方法设置子节点的布局约束,然后将这些子节点添加到 GridPane
实例中。
GridPane gridPane = new GridPane();
// Set the constraints: first row and first column
Label label = new Label("Example");
GridPane.setRowIndex(label, 0);
GridPane.setColumnIndex(label, 0);
// Add the child to the grid
gridpane.getChildren().add(label);
GridPane
提供了组合这些步骤的便捷方法:
gridPane.add(new Button("Press me!"), 1, 0); // column=1 row=0
GridPane
类还提供静态 setter 方法来设置子元素的行和列跨度 :
Label labelLong = new Label("Its a long text that should span several rows");
GridPane.setColumnSpan(labelLong, 2);
gridPane.add(labelLong, 0, 1); // column=0 row=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 :如果没有其他布局区域的增长(或收缩)设置为 ALWAYS 或那些布局区域没有吸收所有增加(或减少)的空间,那么将分享空间的增加(或减少)其他布局区域的 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
s 的排列可以通过使用 ColumnConstraints
类的 setHalignment
(水平)方法和 RowConstraints
类的 setValignment
(垂直)方法来定义。
ColumnConstraints column1 = new ColumnConstraints();
column1.setHalignment(HPos.RIGHT);
RowConstraints row1 = new RowConstraints();
row1.setValignment(VPos.CENTER);