我已经搜索了答案,但只发现了与GridPane和解决方案相同的问题(使用方法" getContent()"或" getTabs()")对我来说不起作用,因为对于Pane来说也没有可行的方法。
我想要做的是在Pane-Element中添加一个Button。我搜索了解决方案,他们总是使用getchildren()。add(Node e)方法。
这是我的代码,我检查了我的对象的类是否为Pane,是的,System.out显示它是Pane。
@Override
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("Lost.fxml"));
Screen screen = Screen.getPrimary();
Rectangle2D bounds = screen.getVisualBounds();
stage.setX(bounds.getMinX());
stage.setY(bounds.getMinY());
stage.setWidth(bounds.getWidth());
stage.setHeight(bounds.getHeight());
Button startButton = new Button("Start1");
//Einfügen des Eventhandlers des Buttons
startButton.setOnAction(null);
//Bestimmen der Position des Buttons
startButton.setPrefHeight((stage.getHeight()/2));
startButton.setPrefWidth((stage.getWidth()/2));
System.out.println(root.getChildrenUnmodifiable().get(0).getClass());
。root.getChildrenUnmodifiable()得到(0).getChildren();
Scene scene = new Scene(root);
stage.setScene(scene);
stage.setResizable(false);
stage.show();
}
我非常感谢您的帮助:)
答案 0 :(得分:2)
如果“Lost.fxml”中的顶部布局是AnchorPane,您可以在加载时直接指定它:
AnchorPane root = FXMLLoader.<AnchorPane>load(getClass().getResource("Lost.fxml"));
您的实际问题:
为什么方法“getChildren”不适用于Pane?
因为在行
root.getChildrenUnmodifiable().get(0).getChildren();
.getChildrenUnmodifiable()
将返回ObservableList<Node>
和
.get(0)
将在此列表的索引0处返回Node
,并且Node是所有节点(窗格,控件等)的顶级基类,它没有
.getChildren()
方法。
如果您确定在子列表的索引= 0处有一个Pane
,您可以转换为它:
ObservableList<Node> paneChildren = ( (Pane) root.getChildren().get(0) ).getChildren();
paneChildren.add( new Button("Do it!") );
我使用的是root.getChildren()而不是root.getChildrenUnmodifiable(),因为我们现在顶部有AnchorPane root
。