为什么方法" getChildren"不和Pane合作?

时间:2015-08-30 11:44:14

标签: javafx-8

我已经搜索了答案,但只发现了与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();
}

我非常感谢您的帮助:)

1 个答案:

答案 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