【发布时间】:2015-02-10 12:55:17
【问题描述】:
我目前有以下情况:
我创建了一个由 FXML 控制器备份的 FXML 文件。屏幕由侧边栏和儿童支架组成。当我点击侧边栏中的元素时,我会在子文件夹中加载一个额外的 FXML 文件,如下所示:
childHolder.getChildren().addAll(FXMLLoader.load(getClass().getResource("SidebarItem1.fxml")));
这很好用。但是我想在父控制器的控制器中访问加载的 FXML 的一些元素。我只是在加载后初始化了子 FXML 的元素。
我已经看过这个问题:JAVAFX - FXML - Access Loaded FXML Controls from Parent Controller,但是当我这样做时,我仍然得到一个错误:
FXMLLoader loader = new FXMLLoader(getClass().getResource("SidebarItem1.fxml"));
loader.setController(this);
childHolder.getChildren().addAll(loader.load());
someChildTextField.setText("Some text");
我给了someChildTextField 一个fx:id,我把它放在初始化的顶部,如下所示:
@FXML public TextField someChildTextField;
不过,我得到了 NullpointerException,所以我认为它仍然找不到控件。
有人知道如何在父控制器中访问加载的 FXML 的元素吗?
【问题讨论】:
-
它应该可以工作,尽管让同一个对象充当两个不同 FXML 文件的控制器是一种不寻常的设置。检查您是否正确设置了
fx:id(如有必要,发布该部分 FXML)。还要检查它是否真的是someChildTextField,即null。 -
我应该只创建单独的控制器吗?
-
另一方面,我仍然无法正常工作。我已经正确设置了
fx:id,它确实是someChildTextField,即null。
标签: javafx javafx-8 fxml fxmlloader