一、javaFX 布局
网上的资料乱七八糟的,没有一个讲的全的; 这次我要把布局搞个完全的记录。
先上文档链接
1、 文档就看这个就够了,刚开始去CSDN浪费了我不少积分
https://docs.oracle.com/javase/8/javafx/api/
2、打开文档找这个 javafx.scene.layout.Pane
,布局就都在这里了,不用去网上搜索那些碎片的资料,这里就是最全的布局的说明文档。
3、布局类列表:
类名 | 布局中文名 | 说明 |
---|---|---|
AnchorPane | 锚点布局 | 设置元素距离上、下、左、右多少像素 |
BorderPane | 边框布局 | 设置元素在容器的上、下、左、右、中里面,中间区域的边距是受四边内元素影响的 |
DialogPane | 对话框布局 | 可设置标题、内容 |
FlowPane | 流式布局 | 按顺序排列,可横向、竖向排列元素,到末尾重新换行或者换列排列,与Hbox、VBox不同的地方 |
GridPane | 网络布局 | 按网格来布局,设置横、竖index来定位, |
HBox | 横向布局 | FlowPane 可以显示全,到末尾重新换行 |
VBox | 竖向布局 | VBox、HBox超过了边界就被截了 |
StackPane | 堆叠布局 | 堆叠布局 ,元素会叠在一起,如果没给每一个元素单独设置位置,就叠在一起 |
TextFlow | 富文本 | 能把文字、图片、按钮搞在一起 |
TilePane | 砖块布局 | 跟那个啥布局很像,这个单个块大小,不影响其它块 |
4、上代码
// 1、坐标布局 设置元素距离上、下、左、右多少像素
AnchorPane anchorP = new AnchorPane();
anchorP.getChildren().addAll(btn1,btn2);
AnchorPane.setLeftAnchor(btn1 , Double.valueOf(0));
AnchorPane.setRightAnchor(btn2 , Double.valueOf(0));
AnchorPane.setTopAnchor(btn2 , Double.valueOf(0));
// 2、边框布局 把元素都设置到4个边缘的位置
BorderPane borderPane = new BorderPane();
borderPane.setTop(btn4);
borderPane.setRight(btn5);
borderPane.setCenter(anchorP);
// 3、DialogPane 弹框布局,
DialogPane dialogPane = new DialogPane();
dialogPane.setHeaderText("标题");
dialogPane.setContent(btn1);
// 4、FlowPane 流式布局
FlowPane flowPane = new FlowPane();
flowPane.setHgap(40);// 设置水平间隙
flowPane.setVgap(40);// 设置竖直间隙
flowPane.setOrientation(Orientation.VERTICAL);// 设置竖直排列
flowPane.getChildren().addAll(btn1,btn2,btn3,btn4);
// 5、GridPane 网络布局 index 都是从0开始,
// 如果不从0开始设置,就自动把最小index 设为了0的位置
GridPane gridPane = new GridPane();
gridPane.setMinSize(100,100);
GridPane.setColumnIndex(btn1 , 1);
GridPane.setRowIndex(btn1,1);
GridPane.setColumnIndex(btn2 , 1);
GridPane.setRowIndex(btn2,2);
GridPane.setColumnIndex(btn3 , 2);
GridPane.setRowIndex(btn3,1);
GridPane.setColumnIndex(btn4 , 2);
GridPane.setRowIndex(btn4,2);
GridPane.setColumnIndex(btn5 , 3);
GridPane.setRowIndex(btn5,3);
GridPane.setColumnIndex(btn6 , 4);
GridPane.setRowIndex(btn6,4);
// 这个网格布局还是建议用 fxml 来写吧,这代码看着挺别扭
gridPane.getChildren().addAll(btn1,btn2,btn3,btn4,btn5,btn6);
// 6、VBox 简单,就是竖着排下来,HBox 就是横着排下来的
VBox vBox = new VBox();
vBox.setAlignment(Pos.TOP_RIGHT);// 设置靠哪边
vBox.setFillWidth(true);
vBox.setSpacing(Double.valueOf(20));
vBox.setMaxSize(120,10);
vBox.getChildren().addAll(btn1,btn2,btn3,btn4,btn5,btn6);
// 7、StackPane 堆叠布局 ,元素会叠在一起,
//如果没给每一个元素单独设置位置,就叠在一起
StackPane stackPane = new StackPane();
stackPane.setAlignment(Pos.BOTTOM_CENTER);
StackPane.setAlignment(btn1,Pos.CENTER_LEFT);
stackPane.getChildren().addAll(btn1,btn2,btn3,btn4,btn5,btn6);
// 8、TextFlow 这个应该不算布局,富文本可以用这个,
//可以把文字、图片、按钮等弄在一起,很好用。
TextFlow textFlow = new TextFlow();
textFlow.setMaxSize(100,20);
textFlow.setMaxWidth(100);
Label label = new Label();
label.setMaxWidth(100);
label.setWrapText(true);
label.setText("我 你");
textFlow.getChildren().addAll(label);
// 9、TilePane 砖块布局 其中一个块的大小,不影响其它块的大小
TilePane tilePane = new TilePane();
tilePane.setPrefRows(1);
tilePane.setPrefColumns(2);
tilePane.setHgap(2);
tilePane.setVgap(3);
TilePane.setMargin(btn1 , new Insets( 100,100,100,100));
tilePane.getChildren().addAll(btn1,btn2,btn3,btn4,btn5,btn6);