VBox布局将子节点堆叠在垂直列中。新添加的子节点被放置在上一个子节点的下面。默认情况下,VBox尊重子节点的首选宽度和高度。
当父节点不可调整大小时,例如Group节点,最大垂直列的宽度基于具有最大优选宽度的节点。
默认情况下,每个子节点与左上(Pos.TOP_LEFT)位置对齐。

示例

以下代码将TextArea控件设置为在调整父VBox的高度时垂直增长:

  1. TextArea myTextArea = new TextArea();
  2. //设置后跟随外边框增长
  3. VBox.setHgrow(myTextArea, Priority.ALWAYS);

完整的代码如下所示

  1. import javafx.application.Application;
  2. import javafx.scene.Scene;
  3. import javafx.scene.control.TextArea;
  4. import javafx.scene.layout.Priority;
  5. import javafx.scene.layout.VBox;
  6. import javafx.scene.paint.Color;
  7. import javafx.stage.Stage;
  8. public class Main extends Application {
  9. @Override
  10. public void start(Stage primaryStage) {
  11. TextArea myTextArea = new TextArea();
  12. VBox hbox = new VBox();
  13. hbox.getChildren().add(myTextArea);
  14. //设置以后跟随外边框增长
  15. VBox.setVgrow(myTextArea, Priority.ALWAYS);
  16. Scene scene = new Scene(hbox, 320, 112, Color.rgb(0, 0, 0, 0));
  17. primaryStage.setScene(scene);
  18. primaryStage.show();
  19. }
  20. public static void main(String[] args) {
  21. launch(args);
  22. }
  23. }

image.png

示例

下面的代码使用四个矩形来演示VBox的使用。

  1. import javafx.application.Application;
  2. import javafx.geometry.Insets;
  3. import javafx.scene.Group;
  4. import javafx.scene.Scene;
  5. import javafx.scene.layout.VBox;
  6. import javafx.scene.shape.Rectangle;
  7. import javafx.stage.Stage;
  8. public class Main extends Application {
  9. @Override
  10. public void start(Stage primaryStage) {
  11. Group root = new Group();
  12. Scene scene = new Scene(root, 300, 250);
  13. // 5 pixels space between child nodes
  14. VBox vbox = new VBox(5);
  15. // 1 pixel padding between child nodes only
  16. vbox.setPadding(new Insets(1));
  17. Rectangle r1 = new Rectangle(10, 10);
  18. Rectangle r2 = new Rectangle(20, 100);
  19. Rectangle r3 = new Rectangle(50, 20);
  20. Rectangle r4 = new Rectangle(20, 50);
  21. VBox.setMargin(r1, new Insets(2, 2, 2, 2));
  22. vbox.getChildren().addAll(r1, r2, r3, r4);
  23. root.getChildren().add(vbox);
  24. primaryStage.setScene(scene);
  25. primaryStage.show();
  26. }
  27. public static void main(String[] args) {
  28. launch(args);
  29. }
  30. }

image.png

VBox间距

  1. VBox vbox = new VBox(8); // spacing = 8
  2. vbox.getChildren().addAll(new Button("Cut"), new Button("Copy"), new Button("Paste"));

完整的实现代码如下所示 -

  1. import javafx.application.Application;
  2. import javafx.scene.Group;
  3. import javafx.scene.Scene;
  4. import javafx.scene.control.Button;
  5. import javafx.scene.layout.VBox;
  6. import javafx.stage.Stage;
  7. public class Main extends Application {
  8. @Override
  9. public void start(final Stage stage) {
  10. stage.setTitle("HTML");
  11. stage.setWidth(500);
  12. stage.setHeight(500);
  13. Scene scene = new Scene(new Group());
  14. VBox vbox = new VBox(8); // spacing = 8
  15. vbox.getChildren().addAll(new Button("Cut"), new Button("Copy"), new Button("Paste"));
  16. scene.setRoot(vbox);
  17. stage.setScene(scene);
  18. stage.show();
  19. }
  20. public static void main(String[] args) {
  21. launch(args);
  22. }
  23. }

image.png

设置填充和间距

  1. import javafx.application.Application;
  2. import javafx.geometry.Insets;
  3. import javafx.scene.Scene;
  4. import javafx.scene.control.Button;
  5. import javafx.scene.control.Label;
  6. import javafx.scene.layout.VBox;
  7. import javafx.scene.text.Font;
  8. import javafx.scene.text.FontWeight;
  9. import javafx.stage.Stage;
  10. public class Main extends Application {
  11. public static void main(String[] args) {
  12. Application.launch(args);
  13. }
  14. @Override
  15. public void start(Stage primaryStage) {
  16. primaryStage.setTitle("VBox Test");
  17. // VBox
  18. VBox vb = new VBox();
  19. vb.setPadding(new Insets(10, 50, 50, 50));
  20. vb.setSpacing(10);
  21. Label lbl = new Label("VBox");
  22. lbl.setFont(Font.font("Amble CN", FontWeight.BOLD, 24));
  23. vb.getChildren().add(lbl);
  24. // Buttons
  25. Button btn1 = new Button();
  26. btn1.setText("Button1");
  27. vb.getChildren().add(btn1);
  28. Button btn2 = new Button();
  29. btn2.setText("Button2");
  30. vb.getChildren().add(btn2);
  31. Button btn3 = new Button();
  32. btn3.setText("Button3");
  33. vb.getChildren().add(btn3);
  34. Button btn4 = new Button();
  35. btn4.setText("Button4");
  36. vb.getChildren().add(btn4);
  37. // Adding VBox to the scene
  38. Scene scene = new Scene(vb);
  39. primaryStage.setScene(scene);
  40. primaryStage.show();
  41. }
  42. }

image.png