JavaFX 中的 VBox
和 HBox
是两种常用的布局组件,分别用于垂直和水平布局。它们继承自 Pane
类,可以包含多个子节点,并且子节点会按照指定的方向排列。
VBox(垂直框)
VBox
组件按照垂直方向排列子节点,子节点上下排列。
基本用法:
- 使用
getChildren().add(node)
方法添加子节点。 - 可以通过
setSpacing(double)
方法设置子节点之间的间距。 - 使用
setAlignment(Pos)
方法设置子节点的对齐方式,如Pos.TOP
、Pos.CENTER
、Pos.BOTTOM
。
VBox 用例:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class VBoxDemo extends Application {
@Override
public void start(Stage primaryStage) {
VBox vbox = new VBox(10); // 间距为10
vbox.setAlignment(Pos.CENTER); // 居中对齐
Button button1 = new Button("Button 1");
Button button2 = new Button("Button 2");
Button button3 = new Button("Button 3");
vbox.getChildren().addAll(button1, button2, button3);
Scene scene = new Scene(vbox, 200, 300);
primaryStage.setTitle("VBox Demo");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
HBox(水平框)
HBox
组件按照水平方向排列子节点,子节点左右排列。
基本用法:
- 与
VBox
类似,使用getChildren().add(node)
方法添加子节点。 - 可以通过
setSpacing(double)
方法设置子节点之间的间距。 - 使用
setAlignment(Pos)
方法设置子节点的对齐方式,如Pos.LEFT
、Pos.CENTER
、Pos.RIGHT
。
HBox 用例:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
public class HBoxDemo extends Application {
@Override
public void start(Stage primaryStage) {
HBox hbox = new HBox(10); // 间距为10
hbox.setAlignment(Pos.CENTER); // 居中对齐
Button button1 = new Button("Button 1");
Button button2 = new Button("Button 2");
Button button3 = new Button("Button 3");
hbox.getChildren().addAll(button1, button2, button3);
Scene scene = new Scene(hbox, 300, 200);
primaryStage.setTitle("HBox Demo");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
在这两个用例中,我们创建了 VBox
和 HBox
布局,并添加了三个按钮作为子节点。通过设置间距和对齐方式,我们能够控制这些按钮的布局和外观。
VBox
和 HBox
非常适合用来快速创建简单的线性布局,它们也可以嵌套使用,以创建更复杂的布局结构。例如,你可以在一个 VBox
中放置多个 HBox
,或者相反,以实现更灵活的布局设计。