【问题标题】:JavaFX - How do you add multiple elements to a StackPane?JavaFX - 如何将多个元素添加到 StackPane?
【发布时间】:2017-03-08 21:22:52
【问题描述】:

我是 JavaFX 的新手。我正在尝试创建一个简单的居中菜单,其中包含带有下方按钮的文本。

我创建了两个元素,Text titleButton testButton。然后我创建了StackPane stackPane。然后,我尝试将这两个元素添加到stackPanes 子代,并将其添加到new Scene。但是,只显示最后一个元素。

如何向 StackPane 添加多个元素?

@Override
public void start(Stage primaryStage) throws Exception {
    primaryStage.setTitle("Test Title");

    Text title = new Text("hey!");
    StackPane.setAlignment(title, Pos.TOP_CENTER);

    Button testButton = new Button("Testing");
    StackPane.setAlignment(testButton, Pos.TOP_CENTER);

    StackPane stackPane = new StackPane();
    stackPane.setPrefSize(300, 300);
    stackPane.setPadding(new Insets(25, 0, 0, 0));

    stackPane.getChildren().add(title);
    stackPane.getChildren().add(testButton);

    Scene scene = new Scene(stackPane);

    primaryStage.setScene(scene);
    primaryStage.show();
}

【问题讨论】:

  • 它们都在那里,它们只是堆叠在另一个之上(这就是StackPane 的子节点布局方式)。只需使用按您想要的方式布置它们的布局窗格。

标签: java javafx


【解决方案1】:

这里想参考官方文档:https://docs.oracle.com/javase/8/javafx/api/javafx/scene/layout/StackPane.html,特别是:

StackPane 在从后到前的堆栈中布置其子级。 子项的 z 顺序由子项列表的顺序定义,第 0 个子项位于底部,最后一个子项位于顶部。如果设置了边框和/或填充,则子元素将被布置在这些插图中。

现在,回答您的问题:您照常做,但您可能想要一个偏移量,因为两个孩子都在同一个位置,因此后来添加的一个将覆盖所有以前的。

你可以通过改变来检查,例如

Text title = new Text("Adding a very, very, very, very, very, very long text here... now that vile button should not overlap me anymore!");

或设置不同的对齐方式。

如果您不想通过手动定位来打扰最佳布局,最好使用另一个为您执行此操作的Pane,例如这里直接已知的子类之一:https://docs.oracle.com/javafx/2/api/javafx/scene/layout/Pane.html

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-13
  • 2021-04-30
  • 1970-01-01
  • 1970-01-01
  • 2012-09-20
  • 2020-08-19
相关资源
最近更新 更多