我是 JavaFX 新手。我正在尝试创建一个简单的居中菜单,其中包含带有下面按钮的文本。
我创建了两个元素:Text title
和Button 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();
}
最佳答案
我想在这里引用官方文档: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/