pka*_*mol 2 methods javafx scrollpane visible
我已经从AnchorPane和一些子元素创建了一个Stage(AnchorPane及其子元素已在Java Scene Builder中创建),层次结构如下所示:

当然,在程序初始化时以编程方式创建舞台和场景.我还想以编程方式添加GridPane作为图像中显示的ScrollPane的子项.在我的程序(特定窗口的控制器)中,我可以获得对ScrollPane的引用:
@FXML
private ScrollPane srcPaneUsers;
Run Code Online (Sandbox Code Playgroud)
(id srcPaneUsers已通过Scene Builder的属性窗口的相应字段给出)
但是!!当我尝试以编程方式添加在运行时通过控制器的initialize方法的以下行创建的新GridPane:
public void initialize(URL location, ResourceBundle resources) {
myGridPane = new GridPane();
srcPaneUsers.getChildren().add(myGridPane);
}
Run Code Online (Sandbox Code Playgroud)
我得到一个编译时错误,上面写着 "父类型的方法getChildren()不可见." 所以我不能在运行时添加我的GridPane.有任何想法吗?
你正在调用错误的方法.你需要
srcPaneUsers.setContent(myGridPane);
Run Code Online (Sandbox Code Playgroud)
getChildren()定义的方法Parent是受保护的方法.它被覆盖在Pane成为一个公共方法,所以对于布局窗格(GridPane,BorderPane,等),你可以直接操作子节点的名单.
ScrollPane的层次结构是ScrollPane extends Control extends Region extends Parent,所以它继承了protected getChildren()方法.这实际上是有道理的:a的子节点ScrollPane就像视口(剪辑内容的视图)和滚动条:你真的不希望用户操纵那些,否则你最终得到的可能不是正常运作.ScrollPane真的只有一个节点是可配置的:其中的节点ScrollPane正在提供的视图:这被称为其content经由和访问contentProperty(),getContent()和setContent()方法.
其他"容器式控件"的工作方式类似.所述TabPane类公开getTabs()返回一个方法ObservableList<Tab>; 并且Tab该类反过来公开一个,contentProperty()以便您可以访问每个单独选项卡的内容.该SplitPane选项卡公开了一个getItems()方法ObservableList<Node>,该方法返回窗格中显示的节点.如果SplitPane它的子节点不仅仅是项目:它们包括代表分隔符的可视组件等.在这两种情况下,该getChildren()方法都是受保护的方法(继承自Parent).
请注意,Parent还定义了一个公共getChildrenUnmodifiable()方法,该方法返回子节点列表的不可修改视图.您可以使用它来检查任何父级的节点层次结构,但不能对其进行修改.(但是出于调试目的,特别是对于使用CSS,我建议使用ScenicView.)