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

时间:2017-03-08 21:22:53

标签: java javafx

我是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();
}

enter image description here

1 个答案:

答案 0 :(得分: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