如何在javaFX中的对话框和父控制器之间进行通信

问题描述

我有一个 MainController,当我按下某个按钮时,会从该 MainController 类中弹出一个自定义对话框(从自定义 FXML 文件加载)。 现在,在该对话框中,有一些文本输入字段和一个按钮。当我按下那个按钮时,对话框应该关闭并且来自输入字段的数据应该被发送到父控制器(在这种情况下是 MainController)。 到目前为止,我想到了一个方法

  1. 首先,使用单例类来存储值
  2. 其次,在对话框的创建过程中通过加载器方法发送dialog实例
DialogController dialogController = loader.getController();
dialogController.setContent(dialog);

但是这样,我担心会出现内存泄漏之类的。有没有更好的方法来做到这一点,例如使用接口?一些帮助将不胜感激!

到目前为止我的代码

MainController.java

 private void openDialog() {
        try {
            JFXDialogLayout content = new JFXDialogLayout();
            FXMLLoader loader = new FXMLLoader(getClass().getResource("dialogs/dialog.fxml"));
            loader.load();
            JFXDialog dialog = new JFXDialog(stackPaneRoot,loader.getRoot(),JFXDialog.DialogTransition.CENTER);
            DialogController dialogController = loader.getController();
            dialogController.setContent(dialog);
            dialog.show();
        } catch (Exception e) {
            e.printstacktrace();
     }
 }

DialogController.java

public class DialogController {

    @FXML
    private TextField nameInput;
    private JFXDialog dialog;

    @FXML
    void onCloseClick(ActionEvent event) {
        dialog.close();
        // Util is the singleton class to store the data
        Util.getInstance().setName(nameInput.getText());
    }

    public void setContent(JFXDialog dialog) {
        this.dialog = dialog;
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)