Javafx 简明教程
JavaFX - Layout Panes(Containers)
在场景中构建所有必需的节点后,我们通常按所需顺序排列它们。我们排列组件其中的容器称为容器的 Layout 。我们也可以说我们遵循了一个布局,因为它有助于将所有组件放置在容器内的特定位置。以下是说明在垂直和水平布局中放置 JavaFX 节点的图表。
在本教程中,我们将讨论 JavaFX 提供的各种预定义布局,包括 HBox, VBox, Border Pane, Stack Pane, Text Flow, Anchor Pane, Title Pane, Grid Pane, Flow Panel 等。上面提到的每个布局都由一个类表示,所有这些类都属于名为 javafx.layout 的包。名为 Pane 的类是 JavaFX 中所有布局的基类。
Creating Nodes
首先,通过实例化其各自的类来创建 JavaFX 应用程序所需节点。例如,如果我们希望在 HBox 布局中有一个文本字段和两个按钮(即播放和停止),我们必须首先创建这些节点,如下所示代码块:
//Creating a text field
TextField textField = new TextField();
//Creating the play button
Button playButton = new Button("Play");
//Creating the stop button
Button stopButton = new Button("stop");
Instantiating the Respective Class
在创建节点(并在其上完成所有操作)后,实例化所需布局的类。例如,如果我们希望创建 Hbox 布局,我们需要按如下方式实例化该类:
HBox hbox = new HBox();
Setting the Properties of the Layout
在实例化该类后,我们需要使用其各自的 setter 方法设置布局的属性。例如:如果我们希望在 HBox 布局中设置创建的节点之间的间距,那么我们需要将值设置为名为 spacing 的属性。这可以通过使用 setter 方法 setSpacing() 来完成,如下所示:
hbox.setSpacing(10);
Adding the node Objects to the Layout Pane
最后,我们需要将创建的节点的对象添加到布局窗格中,方法是将其作为参数值传递,如下所示:
//Creating a Group object
hbox.getChildren().addAll(textField, playButton, stopButton);
Layout Panes in JavaFX
以下是 JavaFX 提供的各种布局窗格(类)。这些类存在于 javafx.scene.layout 包中。
S.No |
Layouts & Description |
1 |
HBox HBox 布局将我们应用程序中的所有节点排列在单个水平行中。包 javafx.scene.layout 中名为 HBox 的类表示文本水平框布局。 |
2 |
VBox VBox 布局将我们应用程序中的所有节点排列在单个垂直列中。包 javafx.scene.layout 中名为 VBox 的类表示文本垂直框布局。 |
3 |
BorderPane Border Pane 布局将我们应用程序中的节点排列在顶部、左侧、右侧、底部和中心位置。包 javafx.scene.layout 中名为 BorderPane 的类表示边框窗格布局。 |
4 |
StackPane StackPane 布局将我们应用程序中的节点像堆栈一样排列在另一个节点之上。首先添加的节点放置在堆栈的底部,下一个节点放置在其上方。包 javafx.scene.layout 中名为 StackPane 的类表示堆栈窗格布局。 |
5 |
TextFlow Text Flow 布局以单一流程排列多个文本节点。包 javafx.scene.layout 中名为 TextFlow 的类表示文本流布局。 |
6 |
AnchorPane Anchor Pane 布局将我们应用程序中的节点固定在距窗格特定距离的位置。包 javafx.scene.layout 中名为 AnchorPane 的类表示 Anchor Pane 布局。 |
7 |
TilePane Tile Pane 布局以统一大小的磁贴形式添加我们应用程序的所有节点。包 javafx.scene.layout 中名为 TilePane 的类表示 TilePane 布局。 |
8 |
GridPane 网格窗格布局将应用中的节点整理为行列网格。在使用 JavaFX 创建表单时,这种布局非常方便。包 javafx.scene.layout 中名为 GridPane 的类表示网格布局。 |
9 |
包 javafx.scene.layout 中名为 FlowPane 的类代表流窗格布局。 |