【问题标题】:JavaFX: ScrollPane method getChildren() is not visibleJavaFX:ScrollPane 方法 getChildren() 不可见
【发布时间】:2014-12-09 12:18:04
【问题描述】:

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

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

@FXML
private ScrollPane srcPaneUsers;

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

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

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

我得到一个编译时错误,上面写着 “Parent 类型的 getChildren() 方法不可见。” 所以我不能在运行时添加我的 GridPane。 有什么想法吗?

【问题讨论】:

    标签: methods javafx visible scrollpane


    【解决方案1】:

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

    srcPaneUsers.setContent(myGridPane);
    

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

    ScrollPane的层次结构是ScrollPane extends Control extends Region extends Parent,所以它继承了protectedgetChildren()方法。这实际上是有道理的:ScrollPane 的子节点是诸如视口(剪辑内容视图)和滚动条之类的东西:您并不真正希望用户操作它们,否则您最终会得到什么可能不再正常运行。 ScrollPanes 实际上只有一个节点是可配置的:ScrollPane 提供视图的节点:这被称为它的 content,并通过 contentProperty()getContent() 和 @987654338 访问@ 方法。

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

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

    【讨论】:

    • 感谢您的正确回复。只是出于好奇,知道为什么getChildren().add(..) 在这里不起作用吗?这就是我向 GridPane 添加元素的方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多