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