JavaFX2.0網(wǎng)格布局窗格GridPane
public class GridPane extends Pane
GridPane將其孩子結(jié)點靈活地放置在行列網(wǎng)格中。若設(shè)置了邊框和邊緣(border and/or padding),它的內(nèi)容只能在這些間隙內(nèi)部。
孩子結(jié)點可以放置在任意位置并且可以跨行列。結(jié)點也可以在行列內(nèi)隨便覆蓋,網(wǎng)格窗格孩子結(jié)點列表中的順序決定了這些結(jié)點的堆棧順序:***個在最下,***一個在上面。
GridPane也可以使用CSS來裝飾。
網(wǎng)格約束
孩子結(jié)點的位置由其布局約束來定義:
約束 | 類型 | 描述 |
---|---|---|
columnIndex | integer | 孩子結(jié)點的起始列 |
rowIndex | integer | 孩子結(jié)點的起始行 |
columnSpan | integer | 孩子結(jié)點的水平跨列數(shù)目 |
rowSpan | integer | 孩子結(jié)點的垂直跨行數(shù)目 |
若孩子結(jié)點的位置沒被指定,則將其放入***行列中。若跨行列數(shù)沒有指定,默認(rèn)為1。孩子結(jié)點的位置約束可以動態(tài)修改,網(wǎng)格窗格會隨著更新。
總的行列數(shù)無需指定,窗格會根據(jù)內(nèi)容自動擴(kuò)展和收縮。
使用GridPane時,程序需要為孩子結(jié)點指定布局約束并將它們加入窗格中。約束使用的是該類的靜態(tài)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);
更可以使用整合了以上步驟的方法來設(shè)置約束:
- GridPane gridpane = new GridPane();
- gridpane.add(new Button(), 2, 1);
- // column=2 row=1
- gridpane.add(new Label(), 3, 1);
- // column=3 row=1
行列大小
行列尺寸默認(rèn)是匹配內(nèi)容的,列寬適應(yīng)的是最寬的元素,行高適應(yīng)的是***的元素。然而,如果程序需要指定行列尺寸,可以通過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
行列默認(rèn)會動態(tài)修改大小。若程序需要特定的行列來適應(yīng)額外的空間,可以設(shè)置 RowConstraints或 ColumnConstraints 對象的優(yōu)先級。比如
- 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可以通過指定百分百來實現(xiàn)。
- 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,它們的值會被當(dāng)成權(quán)重。
可選布局約束
約束 | 類型 | 描述 |
---|---|---|
halignment | javafx.geometry.HPos | 布局區(qū)域中孩子結(jié)點的水平位置. |
valignment | javafx.geometry.VPos | 布局區(qū)域中孩子結(jié)點的垂直位置. |
hgrow | javafx.scene.layout.Priority | 孩子結(jié)點的水平成長優(yōu)先級. |
vgrow | javafx.scene.layout.Priority | 孩子結(jié)點的垂直成長優(yōu)先級. |
margin | javafx.geometry.Insets | 孩子結(jié)點的外部邊空間. |
原文鏈接:http://somefuture.iteye.com/blog/1284339
【編輯推薦】