JavaFX - 如何向 StackPane 添加多个元素?

标签 java javafx

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

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

如何向 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();
}

enter image description here

最佳答案

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

StackPane lays out its children in a back-to-front stack. The z-order of the children is defined by the order of the children list with the 0th child being the bottom and last child on top. If a border and/or padding have been set, the children will be layed out within those insets.

现在,回答您的问题:您按照以前的方式进行操作,但您可能需要一个偏移量,因为两个子级都位于同一位置,因此稍后添加的偏移量将覆盖所有先前的偏移量。

您可以通过更改例如来检查

Text title = new Text("在这里添加非常非常非常长的文本...现在那个邪恶的按钮不应该再与我重叠了!");

或设置不同的对齐方式。

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

关于JavaFX - 如何向 StackPane 添加多个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42682154/

相关文章:

java - Java 中的整数分区

java - 使用 SwingWorker 在 JTextPane 中突出显示语法

java - 根据用户输入在 Google map V2 上绘制圆圈

java - 如何在 JdbcTemplate 中执行多批删除?

java - 我正在尝试使用按钮转到另一个场景,但出现错误,javaFX

java - 将菜单栏添加到网格 Pane

JavaFX 未渲染数组中较早的项目,无法找到问题,相信线程可能是问题所在

css - JavaFX CSS 悬停与 onMouseEntered

java - 从使用 Inno Setup 和 maven 创建的 native javafx 应用程序写入控制台

java - Java中使用正则表达式进行匹配?