当前位置: 首页 > 知识库问答 >
问题:

在父控制器中访问加载的FXML元素

王旺
2023-03-14
childHolder.getChildren().addAll(FXMLLoader.load(getClass().getResource("SidebarItem1.fxml")));
FXMLLoader loader = new FXMLLoader(getClass().getResource("SidebarItem1.fxml"));
loader.setController(this);
childHolder.getChildren().addAll(loader.load());

someChildTextField.setText("Some text");
@FXML public TextField someChildTextField;

但是,我得到一个NullpointerException,所以我假设它仍然找不到控件。

有人知道如何访问父控制器中加载的FXML元素吗?

共有1个答案

齐起运
2023-03-14

我看不出你的方法有什么不起作用的;我嘲弄了一些类似的东西,它工作很好。不过,这是一种不同寻常的方法,因为您使用同一个对象作为两个单独的FXML文件的控制器。

我建议为每个FXML使用一个控制器。所以你可以做一些

public class SidebarItem1Controller {

    @FXML
    private TextField someTextField ;

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

}

然后从父控制器执行以下操作

FXMLLoader loader = new FXMLLoader(getClass().getResource("SidebarItem1.fxml"));
childHolder.getChildren().add(loader.load());
SideBarItem1Controller childController = loader.getController();
childController.setText("Some Text");
 类似资料:
  • 更新 我试过很多解决办法,但都没有达到我的目标。应用程序加载UsersMainPageController,它只包含一个AnchorPane(类似于父控件),因此这是相关代码: [UsersMainPageController]

  • 在应用程序中使用JavaFX,我有一个main.fxml文件,其中包含一些fxml子文件。 我想从子控制器访问Main.fxml的MainController类。 我试着用一个例子来解释得更好: MainFXML: 主控制器: ChildFXML:

  • 问题内容: 当我在JavaFX中调用FXMLLoader#load()时会发生什么? 假设FXML控制器扩展了具有构造函数的类。是否可以保证构造函数将被调用?如果没有,将如何创建该对象的新实例?例如,在下面的代码中,是否将调用TextField()构造函数? 我已经尝试过搜索这个,但是除了“从FXML文档中加载对象层次结构”之外,似乎没有关于它的文档。来自http://docs.oracle.co

  • 我已经试着搜索了这篇文章,但是除了“从FXML文档加载对象层次结构”之外,似乎没有关于它的文档。摘自http://docs.oracle.com/javafx/2/api/javafx/fxml/fxmlloader.html 你的回答将不胜感激。多谢!

  • 在我的程序中,我有一个选项卡窗格,每个选项卡都有自己的FXML文件和控制器。我已经为选项卡2(Schedular)加载了FXML文件。我试图从父控制器(FXML文档)调用子控制器(调度程序)中的函数。当我使用FXML Loader加载控制器时,它返回null。我该如何解决这个问题。 这是我的主要代码: 主要FXML文档: