JAVAFX:在 FXML 之间传递数据不起作用

标签 java javafx javafx-8 fxml

我在这里多次搜索答案,但没有得到我的解决方案。

就我而言: 我想获取用户的输入并检查有效性。如果一切正常,我将从数据库中获取用户ID,并将该ID发送到另一个FXML,然后使用该ID在那里运行选择查询,将结果显示到 tableView 中。

在第二个 FXML( Controller )中,我使用 initialize() 方法将数据设置到 tableView 中,并使用 setId() 方法从之前的 FXML 接收用户 ID。但是,initialize() 方法在 setId() 方法之前被调用,并且由于 ID 为空而没有提供我所需的结果。

二手Passing Parameters JavaFX FXML该方法形成FXML之间传递数据。

最好的解决方案是什么?

仅供引用:目前我正在使用带有静态变量的额外类来存储 ID。

最佳答案

您可以使用 Controller 工厂在返回 Controller 实例之前初始化 id:

FXMLLoader loader = new FXMLLoader(url);
loader.setControllerFactory(c -> {
    MyController controller = new MyController();
    controller.setId(userId);
    return controller;
});
...
Node n = loader.load();

这样,您还可以使用不提供默认构造函数的类作为 Controller 。可以使用更复杂的 Controller 工厂来连接模型和演示者 ( see MVP )。

另一种方法是在 setId 方法而不是 initialize 方法中修改场景的内容,这比使用 Controller 工厂更简单。

最佳解决方案是什么取决于您的需求和个人喜好。但是,如果可能的话,应避免使用static 成员传递数据。

关于JAVAFX:在 FXML 之间传递数据不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34629046/

相关文章:

java - JavaFX GUI 是否对性能影响很大?

css - JavaFX 和 CSS 语法

java - 是否可以覆盖 Glassfish v3 的默认日志记录?

java - 为什么 .setColor(,,,) 说无法在此程序中找到符号?

Javafx GUI 更新

JavaFX:如何从 MenuItem 更改场景(FXML)

javafx-2 - 如何在 javafx2 中的 TextField 上的 focusOut 上打印一些内容

java - 如何仅将部分文本设为粗体

java - 嵌套的 JScrollPane 不适合

c# - 我如何开始用 java 或 c# 为学校项目创建一个小型编译器