需要有关 getChildrenUnmodifying 的解释

1 java javafx root

我在 JavaFX 中进行根修改时遇到问题。

一个类加载 FXML 并创建一个场景,但我无法使用该getChildren()函数,只有getChildrenUnmodifiable().

第一个容器login.fxml是 a StackPane,也许StackPane不支持它,就像某些控件一样?

我可能误解了 JavaFX 的工作原理。

我创建了一个测试应用程序来查看项目的其他类是否导致了问题:

@Override
public void start(Stage primaryStage) throws Exception {
    Parent rootScene = FXMLLoader.load(getClass().getResource("login.fxml"));
    Scene scene = new Scene(rootScene, 900, 500);
    //rootScene.getChildrenUnmodifiable()
}
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么吗?

Jam*_*s_D 5

正如另一个答案中指出的,Parent.getChildren()是一种protected方法。但是,它在 中被重写StackPane(实际上是在 中Pane,因此对于所有子类都是如此Pane)并且可见性扩大到public

因此,由于 FXML 的根实际上是 a StackPane,因此您所要做的就是更改 的编译时类型root

@Override
public void start(Stage primaryStage) throws Exception {
    StackPane rootScene = FXMLLoader.load(getClass().getResource("login.fxml"));
    rootScene.getChildren().add(...);
    Scene scene = new Scene(rootScene, 900, 500);
}
Run Code Online (Sandbox Code Playgroud)