javafx - 在父 Controller 中访问加载的 FXML 的元素

标签 javafx javafx-8 fxml fxmlloader

我目前有以下情况:

我创建了一个由 FXML Controller 备份的 FXML 文件。屏幕由侧边栏和子支架组成。当我点击侧边栏中的一个元素时,我会在子容器中加载一个额外的 FXML 文件,如下所示:

childHolder.getChildren().addAll(FXMLLoader.load(getClass().getResource("SidebarItem1.fxml")));

这很好用。但是我想在Parent Controller的Controller中访问加载的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,所以我假设它仍然找不到控件。

有谁知道如何在父 Controller 中访问加载的 FXML 的元素?

最佳答案

我看不出有任何理由使您的方法不起作用;我 mock 了类似的东西,它工作得很好。不过,这是一种不寻常的方法,因为您使用同一个对象作为两个单独 FXML 文件的 Controller 。

我建议为每个 FXML 使用一个 Controller 。所以你可以做类似的事情

public class SidebarItem1Controller {

    @FXML
    private TextField someTextField ;

    public void setText(String text) {
        someTextField.setText(text);
    }

}

然后从你的父 Controller 做

FXMLLoader loader = new FXMLLoader(getClass().getResource("SidebarItem1.fxml"));
childHolder.getChildren().add(loader.load());
SideBarItem1Controller childController = loader.getController();
childController.setText("Some Text");

以通常的方式在 SideBarItem1.fxml 文件中设置 Controller ,使用 fx:controller = com.example.SidebarItem1Controller"

关于javafx - 在父 Controller 中访问加载的 FXML 的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27433041/

相关文章:

fonts - 如何嵌入 .ttf 字体是 JavaFx 2.2?

java - 适用于 Android 的所见即所得 JavaFX?

java - 在 Java fxml 应用程序中为动态创建的 Text 对象应用鼠标单击监听器

java - 将 javafx 窗口自动调整为 scenebuilder pref 宽度和高度?

javafx-2 - 我如何在 Javafx2 中使用 jfreeChart

java - 如何从 javafx 中的按钮内部获取按键事件

java - 使用 if 语句比较 String 和 Arrays.asList 值

java - 在 JavaFX 中从一个 View 的另一个 View 更改 Stackpane#enabled 属性

JavaFX 元素在动画之前对齐

java - 如何在 JavaFX 中获取父节点中的所有节点?