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
成员传递数据。
我在这里搜索了几次答案,但没有得到我的解决方案。
以我为例: 我想接受用户的输入并检查有效性。如果一切正常,我将从数据库中获取用户 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
成员传递数据。