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

(JavaFX)如何在不知道FXML控制器名称情况下将类的实例传递给FXML控制器?

柏阳炎
2023-03-14

我正在开发一个JavaFX应用程序,它有几个“子”FXML视图。我正在努力确保所有的孩子都能访问“根”布局。

下面是我的应用程序的基本层次结构:

RootLayout
  -> SubLayout1
    -> UnknownLayout
FXMLLoader loader = new FXMLLoader(getClass().getResource(file.toString()));
loader.setController(controller);
loader.setRoot(this);
loader.load();

我的问题是,我不知道如何将RootLayout控制器的实例传递给UnknownLayoutController以便它能够访问该控制器中的方法。我在每个UnknownLayoutController类中确实有一个方法,允许我将RootLayout的控制器传递给它:

public void setRootLayoutController (RootLayoutController rootController) {}

rootcontroller传递给sublayout1不是问题,因为我可以将它与构造函数一起传递。但如果不知道unknownLayout的实际名称,我将如何调用该方法?有没有办法从fxmlloader块中调用新控制器的构造函数?有什么“最佳实践”的方法来实现这一点吗?

我的控制器引用在此处创建:

StringBuilder controller = new StringBuilder();
controller.append(title + "Controller.java");

我还研究了在UnknownLayoutController中实现接口,但随后在该代码上出现NullPointerException错误:

UnknownLayoutInterface subController = loader.getController();
subController.setRootController(rootController);

controller变量是一个字符串,它包含所讨论的控制器的名称,但是否有一种方法可以将字符串转换为同名的对象并以这种方式访问它?

(我现在在FXMLfx:controller标记中而不是在代码中定义FXMLs控制器)。

共有1个答案

司马耘豪
2023-03-14

通过简化代码并根据文件名确定类类型(文件名是动态确定的),我能够解决这种情况:

Class subLayout;
  SubLayout2Interface subInterface = null;
  try {
    subLayout = Class.forName([Full Package Name] + subLayoutTitle);
    subInterface = (SubLayout2Interface) subLayout.newInstance();
  } catch (Exception e) {
    e.printStackTrace();
}

subInterface.setRootController(this);
 类似资料:
  • 问题内容: 我试图在JavaFX中获得TableView来动态显示内容。 当我运行程序时,出现此错误: 我的控制器名为“ UserInterfaceController.java”,它与FXML文件位于同一软件包下,我也已将该软件包导入了FXML中。为什么找不到控制器? FXML文件: 控制器: 主类: 问题答案: 使用FXML的全限定名来引用您的控制器: 后续问题的答案 对以下问题的回答解释了为

  • 我试图在JavaFX中获得一个TableView来动态显示内容。 当我运行程序时,出现以下错误: 我的控制器名为“UserInterfaceController.java”,它与FXML文件在同一个包下,我也在FXML中导入了包。为什么找不到控制器? FXML文件: 控制器: 主要类:

  • 问题内容: 我有一个登录屏幕,我想将登录ID从LoginController传递到MainController,因此我可以访问一些功能来更改密码和其他功能。 我这样加载控制器: Main.fxml绑定到MainController.java。有没有一种方法可以传递所需的用户ID,并在控制器的initialize()方法上对其进行访问? 问题答案: 用FXMLLoader加载控制器后,可以在调用sh

  • 有没有办法将参数传递给fxml文件中的onAction方法?或者,我可以以某种方式获得调用onAction方法的组件的fx:id吗? 我有几个按钮可以做同样的事情,比如说5个带有ID button1-button5的按钮,当按下时,应该打印相应的数字1-5。我不希望有5个onAction方法与这个变量相同。 感谢您的帮助,

  • 我无法完成的任务是将参数从一个场景传递到另一个场景并返回。 或者换句话说:主控制器加载子控制器的fxml,将对象传递给子控制器,切换场景。不得有两扇开着的窗户。工作完成后,副控制器将场景切换回主控制器,并将一些对象传递回主控制器。这就是我失败的地方。 这个问题和这个问题很相似但仍然没有答案。传递参数JavaFX FXML在注释中也提到了: 有没有人知道如何在没有外部库的情况下实现这一点?