Methods JavaFX:ScrollPane方法getChildren()不可见

Methods JavaFX:ScrollPane方法getChildren()不可见,methods,javafx,visible,scrollpane,Methods,Javafx,Visible,Scrollpane,我已经从AnchorPane和一些子元素(AnchorPane及其子元素已在Java Scene Builder中创建)创建了一个舞台,层次结构如下所示: 当然,舞台和场景是在程序初始化时以编程方式创建的。 我还想以编程方式添加一个GridPane作为图中所示滚动窗格的子级。 在我的程序(特定窗口的控制器)中,我可以获得对滚动窗格的引用: @FXML private ScrollPane srcPaneUsers; (已通过“场景生成器”的“属性”窗口的相应字段指定了srcPaneUsers

我已经从AnchorPane和一些子元素(AnchorPane及其子元素已在Java Scene Builder中创建)创建了一个舞台,层次结构如下所示:

当然,舞台和场景是在程序初始化时以编程方式创建的。 我还想以编程方式添加一个GridPane作为图中所示滚动窗格的子级。 在我的程序(特定窗口的控制器)中,我可以获得对滚动窗格的引用:

@FXML
private ScrollPane srcPaneUsers;
(已通过“场景生成器”的“属性”窗口的相应字段指定了srcPaneUsers id)

但是!!:当我尝试以编程方式添加在运行时通过控制器的initialize方法的以下行创建的新GridPane时:

public void initialize(URL location, ResourceBundle resources) {
    myGridPane = new GridPane();
    srcPaneUsers.getChildren().add(myGridPane);
}
我得到一个编译时错误,它说 “类型父级的getChildren()方法不可见。” 因此,我无法在运行时添加GridPane。
有什么想法吗?

你调用了错误的方法。你需要

srcPaneUsers.setContent(myGridPane);
Parent
中定义的
getChildren()
方法是受保护的方法。它在
窗格
中被重写为公共方法,因此对于布局窗格(
网格窗格
边框窗格
等),您可以直接操作子节点列表

ScrollPane
的层次结构是
ScrollPane扩展控件扩展区域扩展父对象
,因此它继承了
受保护的
getChildren()
方法。这实际上是有道理的:
滚动窗格的子节点是类似于视口(剪辑内容视图)和滚动条的东西:你并不真的希望用户操纵它们,否则你最终得到的可能不再正常工作
ScrollPane
s实际上只有一个可配置的节点:
ScrollPane
提供视图的节点:该节点称为其
内容
,通过
contentProperty()
getContent()
setContent()
方法访问

其他“类似容器的控件”的工作方式也类似。
选项卡窗格
类公开了一个
getTabs()
方法,该方法返回一个
可观察列表
;而
Tab
类依次公开一个
contentProperty()
,因此您可以访问每个选项卡的内容。
SplitPane
选项卡公开了一个
getItems()
方法,该方法为窗格中显示的节点返回一个
observeList
。在
SplitPane
的情况下,其子节点不仅仅是项:它们包括表示分隔符的可视组件等。在这两种情况下,
getChildren()
方法都是受保护的方法(继承自
Parent


请注意,
Parent
还定义了一个public
getChildrenUnmodifiable()
方法,该方法返回子节点列表的不可修改视图。您可以使用它来检查任何父节点的节点层次结构,但不能修改它。(不过,出于调试目的,特别是在使用CSS时,我建议使用。)

感谢您的正确回复。出于好奇,你知道为什么
getChildren().add(…)
在这里不起作用吗?这就是我向GridPane添加元素的方式。