GridPane 在行和列的灵活网格内布置其子项。
子项可以放置在内的任何位置,GridPane并且可以跨越多个行/列(默认范围为1),并且其在网格内的位置由其布局约束定义:
约束 | 描述 |
---|---|
columnIndex | 子级布局区域开始的列。 |
rowIndex | 子布局区域开始的行。 |
columnSpan | 子布局区域水平跨越的列数。 |
行跨度 | 子布局区域垂直跨越的行数。 |
不需要预先指定行/列的总数,因为网格窗格将自动扩展/收缩网格以容纳内容。
为了将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);