如何将 JDialog 框中的值返回到父 JFrame?

2022-08-31 21:07:35

我创建了一个模态JDialog框,上面有一个自定义绘图和一个JButton。当我单击 JButton 时,JDialog 框应该关闭,并且应该返回一个值。

我在父 JFrame 中创建了一个名为 setModalPiece 的函数,该函数接收一个值并将其设置为局部 JFrame 变量。

问题是,此函数在 JDialog 框中不可见(即使 JDialog 框具有对父 JFrame 的引用)。

两个问题:1)有没有更好的方法将值从JDialog框返回到其父JFrame?

2) 为什么传递给 JDialog 的 JFrame 引用不能用于访问我的 JFrame 函数集ModalPiece?


答案 1

我通常这样做:

Dialog dlg = new Dialog(this, ...);
Value result = dlg.showDialog();

该函数如下所示:Dialog.showDialog()

ReturnValue showDialog() {
    setVisible(true);
    return result;
}

由于在 JDialog 上将可见性设置为 true 是一个模式操作,因此“确定”按钮可以将实例变量 () 设置为对话框的选定结果(如果取消)。在“确定/取消”按钮方法中处理后,请执行以下操作:resultnull

setVisible(false);
dispose();

将控制权返回给函数。showDialog()


答案 2

您应该通过向自定义 方法添加自定义方法来执行相反的操作。getValue()JDialog

通过这种方式,您可以通过调用本身的某些内容来从 中询问对话框的值。JFrameJFrame

如果你看一下Oracle关于对话框的教程,它在这里指出

如果要设计自定义对话框,则需要设计对话框的 API,以便可以查询有关用户选择的内容的对话。例如,CustomDialog 具有一个 getValidatedText 方法,该方法返回用户输入的文本。

(您可以找到 的来源,看看他们如何假设您将设计自定义对话框)CustomDialog


推荐