JavaFX2.0網格布局窗格GridPane
public class GridPane extends Pane
GridPane將其孩子結點靈活地放置在行列網格中。若設置了邊框和邊緣(border and/or padding),它的內容只能在這些間隙內部。
孩子結點可以放置在任意位置并且可以跨行列。結點也可以在行列內隨便覆蓋,網格窗格孩子結點列表中的順序決定了這些結點的堆棧順序:***個在最下,***一個在上面。
GridPane也可以使用CSS來裝飾。
網格約束
孩子結點的位置由其布局約束來定義:
約束 | 類型 | 描述 |
---|---|---|
columnIndex | integer | 孩子結點的起始列 |
rowIndex | integer | 孩子結點的起始行 |
columnSpan | integer | 孩子結點的水平跨列數目 |
rowSpan | integer | 孩子結點的垂直跨行數目 |
若孩子結點的位置沒被指定,則將其放入***行列中。若跨行列數沒有指定,默認為1。孩子結點的位置約束可以動態修改,網格窗格會隨著更新。
總的行列數無需指定,窗格會根據內容自動擴展和收縮。
使用GridPane時,程序需要為孩子結點指定布局約束并將它們加入窗格中。約束使用的是該類的靜態setter方法:
- GridPane gridpane = new GridPane();
- // Set one constraint at a time...
- Button button = new Button();
- GridPane.setRowIndex(button, 1);
- GridPane.setColumnIndex(button, 2);
- // or convenience methods set more than one constraint at once...
- Label label = new Label();
- GridPane.setConstraints(label, 3, 1);
- // column=3 row=1
- // don't forget to add children to gridpane
- gridpane.getChildren().addAll(button, label);
更可以使用整合了以上步驟的方法來設置約束:
- GridPane gridpane = new GridPane();
- gridpane.add(new Button(), 2, 1);
- // column=2 row=1
- gridpane.add(new Label(), 3, 1);
- // column=3 row=1
行列大小
行列尺寸默認是匹配內容的,列寬適應的是最寬的元素,行高適應的是***的元素。然而,如果程序需要指定行列尺寸,可以通過RowConstraints 和ColumnConstraints對象指定。比如,
- GridPane gridpane = new GridPane();
- gridpane.getColumnConstraints().add(new ColumnConstraints(100));
- // column 1 is 100 wide
- gridpane.getColumnConstraints().add(new ColumnConstraints(200));
- // column 2 is 200 wide
行列默認會動態修改大小。若程序需要特定的行列來適應額外的空間,可以設置 RowConstraints或 ColumnConstraints 對象的優先級。比如
- GridPane gridpane = new GridPane();
- ColumnConstraints column1 = new ColumnConstraints(100,100,Double.MAX_VALUE);
- column1.setHgrow(Priority.ALWAYS);
- ColumnConstraints column2 = new ColumnConstraints(100);
- gridpane.getColumnConstraints().addAll(column1, column2);
- // first column gets any extra width
百分百大小
或者,RowConstraints 和ColumnConstraints可以通過指定百分百來實現。
- GridPane gridpane = new GridPane();
- ColumnConstraints column1 = new ColumnConstraints();
- column1.setWidthPercent(50);
- ColumnConstraints column2 = new ColumnConstraints();
- column2.setWidthPercent(50);
- gridpane.getColumnConstraints().addAll(column1, column2); // each get 50% of width
指定百分百后,行列的三個最值都會被忽略。
如果百分百總值超過了100,它們的值會被當成權重。
可選布局約束
約束 | 類型 | 描述 |
---|---|---|
halignment | javafx.geometry.HPos | 布局區域中孩子結點的水平位置. |
valignment | javafx.geometry.VPos | 布局區域中孩子結點的垂直位置. |
hgrow | javafx.scene.layout.Priority | 孩子結點的水平成長優先級. |
vgrow | javafx.scene.layout.Priority | 孩子結點的垂直成長優先級. |
margin | javafx.geometry.Insets | 孩子結點的外部邊空間. |
原文鏈接:http://somefuture.iteye.com/blog/1284339
【編輯推薦】