JavaFX:ScrollPane方法getChildren()不可见

时间:2014-10-14 16:07:01

标签: methods javafx visible scrollpane

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

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

@FXML
private ScrollPane srcPaneUsers;

(id srcPaneUsers已通过Scene Builder的属性窗口的相应字段给出)

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

public void initialize(URL location, ResourceBundle resources) {
    myGridPane = new GridPane();
    srcPaneUsers.getChildren().add(myGridPane);
}

我得到一个编译时错误 "来自Parent类型的方法getChildren()不可见。" 所以我不能在运行时添加我的GridPane。 有什么想法吗?

1 个答案:

答案 0 :(得分:7)

你正在调用错误的方法。你需要

srcPaneUsers.setContent(myGridPane);

getChildren()中定义的Parent方法是受保护的方法。它在Pane中被覆盖为公共方法,因此对于布局窗格(GridPaneBorderPane等),您可以直接操作子节点列表。

ScrollPane的层次结构为ScrollPane extends Control extends Region extends Parent,因此它继承了protected getChildren()方法。这实际上是有道理的:ScrollPane的子节点就像视口(剪辑内容的视图)和滚动条:你真的不希望用户操纵那些,否则你的结局可能不再正常运行。 ScrollPane实际上只有一个可配置的节点:ScrollPane提供视图的节点:这被称为content并通过contentProperty()访问,getContent()setContent()方法。

其他“容器式控件”的工作方式类似。 TabPane类公开了一个返回getTabs()的{​​{1}}方法;并且ObservableList<Tab>类依次公开Tab,以便您可以访问每个标签的内容。 contentProperty()选项卡公开SplitPane方法,为窗格中显示的节点返回getItems()。在ObservableList<Node>的情况下,它的子节点不仅仅是项目:它们包括代表分隔符的可视组件等。在这两种情况下,SplitPane方法都是受保护的方法(继承自{ {1}})。

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