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

Rol*_*lan 43 java swing return-value jdialog

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

我在父JFrame中创建了一个名为setModalPiece的函数,它接收一个值并将其设置为本地JFrame变量.

问题是从JDialog框中看不到此函数(即使JDialog框具有对父JFrame的引用).

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

2)为什么不能使用传递给JDialog的JFrame的引用来访问我的JFrame函数setModalPiece?

Jon*_*han 108

我通常这样做:

Dialog dlg = new Dialog(this, ...);
Value result = dlg.showDialog();
Run Code Online (Sandbox Code Playgroud)

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

ReturnValue showDialog() {
    setVisible(true);
    return result;
}
Run Code Online (Sandbox Code Playgroud)

由于在JDialog上将可见性设置为true是一种模态操作,因此OK按钮可以将实例变量(result)设置为对话框的选定结果(或者null如果取消).在"确定/取消"按钮方法中处理后,执行以下操作:

setVisible(false);
dispose();
Run Code Online (Sandbox Code Playgroud)

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

  • 小注释 - 如果使用JDialog,则必须通过构造函数中的正确参数或通过SetModal(true)将其声明为模态; (8认同)
  • 仅供参考,@Oz Radiano 的有用评论的更新:setModal 此方法已过时,保留仅用于向后兼容。请改用 setModalityType()。 (2认同)

Jac*_*ack 23

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

通过这种方式,您可以JFrame通过调用JFrame自身的内容来设置对话框的值.

如果您在这里查看有关对话框的Oracle教程,请说明

如果您正在设计自定义对话框,则需要设计对话框的API,以便查询用户选择的对话框.例如,CustomDialog有一个getValidatedText方法,该方法返回用户输入的文本.

(你可以找到CustomDialog他们认为你将如何设计自定义对话框的来源)