我是JavaFX的新手。我正在尝试创建一个简单的居中菜单,其中包含带有按钮的文本。
我创建了两个元素Text title
和Button 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();
}
答案 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