methods - JavaFX:ScrollPane 方法 getChildren() 不可见

标签 methods javafx visible scrollpane

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

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

@FXML
private ScrollPane srcPaneUsers;

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

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

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

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

最佳答案

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

srcPaneUsers.setContent(myGridPane);

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

ScrollPane的层次结构是 ScrollPane extends Control extends Region extends Parent , 所以它继承了 protected getChildren()方法。这实际上是有道理的:ScrollPane 的子节点像视口(viewport)(剪辑内容的 View )和滚动条之类的东西:你真的不希望用户操纵它们,否则你最终得到的可能不再正确运行。 ScrollPane实际上只有一个节点是可配置的:ScrollPane 的节点正在提供一个 View :这被称为它的 content并通过 contentProperty() 访问, getContent() , 和 setContent()方法。

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

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

关于methods - JavaFX:ScrollPane 方法 getChildren() 不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26365309/

相关文章:

c# - 方法创建困境

java - 如何在javafx中创建线程

java - 当按下键盘上的某个键时,如何更改按钮的外观。 JavaFX

Javascript:如何检查元素是否可见?

ruby - 方法定义中的额外表达式

java - 具有两个数组的方法。如果第一个数组中的值返回不为空,则必须使用其他数组的相应元素作为第二个方法的参数

JavaFX 组合框崩溃

javascript - jquery: this.not (':animated' ) && that.is (':visible' ) 不遵守规则,语法问题?只有几行代码

jquery - 获取可滚动 div 中的第一个和最后一个可见元素

c# - 如何使用反射在静态类中查找私有(private)静态方法?