gpt4 book ai didi

parameter-passing - JavaFX FXML 参数从 Controller A 传递到 B 并返回

转载 作者:行者123 更新时间:2023-12-01 18:44:37 25 4
gpt4 key购买 nike

我想创建一个基于 JavaFX GUI 的 Controller ,其中包含多个 Controller 。

我无法完成的任务是将参数从一个场景传递到另一个场景并返回。

或者换句话说:MainController加载SubController的fxml,将对象传递给SubController,切换场景。不得有两个打开的 window 。工作完成后,子 Controller 将场景切换回主 Controller 并传回一些对象。这就是我失败的地方。

这个问题与这个问题非常相似,但仍然没有答案。 Passing Parameters JavaFX FXML评论中也提到了:

“当您将参数从第一个 Controller 传递到第二个 Controller 时,这是有效的,但如何将参数从第二个 Controller 传递到第一个 Controller ,我的意思是在加载first.fxml之后。

– Xlint Xms 2017 年 9 月 18 日 23:15"

我在该线程的最佳答案中使用了第一种方法。

有人知道如何在没有外部库的情况下实现这一目标吗?

最佳答案

有很多方法可以做到这一点。

这是一个解决方案,它通过 Consumer到另一个 Controller 。一旦完成工作,另一个 Controller 就可以调用使用者来接受结果。该示例基于您链接的问题的答案中的示例代码。

public Stage showCustomerDialog(Customer customer) {
FXMLLoader loader = new FXMLLoader(
getClass().getResource(
"customerDialog.fxml"
)
);

Stage stage = new Stage(StageStyle.DECORATED);
stage.setScene(
new Scene(
(Pane) loader.load()
)
);

Consumer<CustomerInteractionResult> onComplete = result -> {
// update main screen based upon result.
};
CustomerDialogController controller =
loader.<CustomerDialogController>getController();
controller.initData(customer, onComplete);

stage.show();

return stage;
}

...

class CustomerDialogController() {
@FXML private Label customerName;
private Consumer<CustomerInteractionResult> onComplete
void initialize() {}
void initData(Customer customer, Consumer<CustomerInteractionResult> onComplete) {
customerName.setText(customer.getName());
this.onComplete = onComplete;
}

@FXML
void onSomeInteractionLikeCloseDialog(ActionEvent event) {
onComplete.accept(new CustomerInteractionResult(someDataGatheredByDialog));
}
}

执行此操作的另一种方法是将结果属性添加到对话框屏幕的 Controller ,感兴趣的调用者可以监听或检索结果属性。一个result property这就是内置 JavaFX 对话框的工作方式,因此您本质上是在模仿其中的一些功能。

如果你有很多这样的来回传递的东西,一个基于类似 Gluon Ignite 的共享依赖注入(inject)模型,可能会帮助你。

关于parameter-passing - JavaFX FXML 参数从 Controller A 传递到 B 并返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48173320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com