为什么我的窗格有null Parent和null Scene?

时间:2017-04-08 10:55:23

标签: java javafx

我是JavaFX的新手,我想知道为什么我在我的fxml代码中创建的窗格没有父级和场景。

这是代码;

// Code in Main
Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
Scene scene = new Scene( root, 800, 600);

// Fxml code
<Pane fx:controller="sample.Controller" fx:id="pane"
      xmlns:fx="http://javafx.com/fxml">
</Pane>

当我致电scene.getRoot()时,我得到了我在fxml中创建的窗格。 但是调用pane.getScene()pane.getParent()会返回null。

我是否以错误的顺序思考这个问题? getParent()getScene()是否应为null,因为Pane没有Scene但是Scene有Root? 例如舞台有一个场景?

如果是这样, 有没有办法让我使用该窗格访问具有此窗格作为其子窗格的场景或父级?

(我还期望scene.getRoot()返回Parent而不是Pane,但我想这与命名有关?)

1 个答案:

答案 0 :(得分:0)

在root上调用getParent()将始终返回null,因为在这种情况下,root是SceneGraph中最重要的元素。在将getScene()添加到Pane之前调用Scene也会返回null,因为未在Pane组件上设置场景属性。

Parent root = FXMLLoader.load(getClass().getResource("test.fxml"));
System.out.println("Root getParent(): " + root.getParent());
System.out.println("Root getScene() before Scene: " + root.getScene());

Scene scene = new Scene(root, 600, 600);
System.out.println("Scene getRoot(): " + scene.getRoot());
System.out.println("Root getScene() after Scene: " + root.getScene());

stage.setScene(scene);
stage.show();

<强>输出

Root getParent(): null
Root getScene() before Scene: null
Scene getRoot(): StackPane@547a5be4[styleClass=root]
Root getScene() after Scene: javafx.scene.Scene@24fd3643