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

JAVAFX: Passing data between FXML not Working

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

以我为例: 我想接受用户的输入并检查有效性。如果一切正常,我将从数据库中获取用户 ID 并将 ID 发送到另一个 FXML,然后 运行 a select 使用 ID 在那里查询并将结果显示到 tableView 中。

在第二个 FXML(控制器)中,我使用 initialize() 方法将数据设置到 tableView 中,并使用 setId() 方法接收用户 ID 来自以前的 FXML。但是,initialize() 方法在 setId() 方法之前被调用并且没有提供我需要的结果,因为 ID 为空。

使用Passing Parameters JavaFX FXML此方法在 FXML 之间传递数据。

最好的解决方案是什么?

仅供参考:目前我正在使用额外的 class 和静态变量来存储 ID。

您可以使用控制器工厂在它之前初始化 id returns 控制器实例:

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

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

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

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