JavaFX 内置的布局面板

时间:2021-06-25 17:00:07

今晚看了一下JavaFX SDK中布局容器相关类,面板(Pane)。

写个大概吧。


FlowPane:

节点以水平方式一行一行放置或者垂直方式一列一列放置。垂直的FlowPane会在高度边界处自动换列,水平的FlowPane会在宽度边界处自动换行。

 
FlowPane flow = new FlowPane();
flow.setPadding(new Insets(5, 0, 5, 0));//设置
flow.setVgap(4);//设置节点间垂直间隔
flow.setHgap(4);//设置节点间水平间隔
flow.setPrefWrapLength(100); // 设置FlowPane的宽度
flow.setStyle(“-fx-background-color: DAE6F3;”);



BorderPane:

布局面包被划分为5个区域来放置界面元素:上、下、左、右、中。每个区域的大小是没有限制的。在你使用BorderPane时,如果不需要某个区域,你只要不为该区域设置内容,该区域则不会被分配显示空间,自然也就不会显示。

BorderPane border=new BorderPane();
border.setLeft(node1);
border.setTop(node2)
border.setCenter(node3);
border.setRight(node4);



HBox/VBox: 将多个结点排列在一行或者一列。 VBox的宽度与其包含的所有组件的最大预设宽度一致,HBox同理。
   HBox hbox = new HBox();
hbox.setPadding(new Insets(10, 10, 10, 10)); //节点到边缘的距离
hbox.setSpacing(10); //节点之间的间距
hbox.setStyle(“-fx-background-color: #32239;”); //背景色

Button bt1 = new Button(“miao”);
Button bt2 = new Button(“wang”);
hbox.getChildren().addAll(bt1,bt2);


StackPane:

将所有的节点放在一个堆栈中进行布局管理,后添加进去的节点会显示在前一个添加进去的节点之上。

对齐属性(Alignment)可控制子节点在StackPane中的位置,同时该属性会影响所有的子节点。

外边距属性(Margin)控制在StackPane中的单个子节点位置。


GridPane:

节点可以被放置到任意一个单元格中,也可以根据需要设置一个节点跨越多个单元格(行或者列)。

关于这个多说几句,每个单元格的长宽都和单元格内的node的长宽相关,对于某一行或者某一列,总是选择最长的那个node长度来成为单元格的长度。但是如果node跨越了多个单元格,那么选择除了该node以外的最长的node。

   GridPane grid = new GridPane();
grid.setHgap(10);
grid.setVgap(10);
grid.setPadding(new Insets(0, 10, 0, 10));

// 将node1放在第1行,第2列
Text node1 = new Text(“node1”);
category.setFont(Font.font(“Arial”, FontWeight.BOLD, 20));
grid.add(category, 1, 0);

// 将node2放在第2行,占第2和第3列
Text chartSubtitle = new Text(“node22222222222222”);
grid.add(chartSubtitle, 1, 1, 2, 1);

大概就这样,以后再补充。