【发布时间】:2013-08-22 05:38:47
【问题描述】:
我知道,这个问题经常出现在 SO 中,例如 here: 但我想举一些非常具体的例子......我只是不确定我是否做对了。
我有一个 JDialog,我可以在其中输入一些值,选择一些复选框...随便... 我还在 MyDialog 中创建了一些 Response 对象,它代表 MyDialog 的“答案”。
在调用/创建 JDialog 的 JFrame 中:
MyDialog d = new MyDialog(this, ...);
d.showDialog();
// After MyDialog is closed (it's modal):
MyDialog.Response dialogResponse = d.getDialogResponse();
// Do something with response...
在对话框中(点击“保存”按钮可以关闭对话框):
btnSave.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dialogResponse = prepareResponse(); // prepares response on the basis of some data introduced by a user; dialogResponse is called from JFrame after Dialog is closed
setVisible(false);
dispose(); // <-- Important
}
});
我的问题是:
这个解决方案有效,我的意思是,MyDialog.Response dialogResponse = d.getDialogResponse(); 行返回正确的值,但是......
如果我使用 dispose() 关闭对话框,所有对话框的资源都可以被垃圾收集(不必......很难预测,对吗?)。那么以这种方式检索我的对话框的响应是否正确......也许在这种情况下我应该只写setVisible(false);而不写dispose()。
【问题讨论】:
-
如果您以后需要
JDialog,请不要丢弃它,只需使用setVisible(false),否则您可以毫无问题地丢弃它 -
不确定我是否理解,因此发表了评论,但你不能从框架中处理对话框吗?
-
@npinti 是的,但我主要是好奇在对话框上调用 dispose() 后是否可以访问对话框的响应
-
如果我正确地理解了您的问题,为什么不在您在对话框中填写值时创建一个名为
DialogResponse的类,对您的DialogResponse类的对象和简单的return进行必要的更改这个对象到父JFrame,这样你真的不必担心JDialog被dispose,此外,如果再次使用相同的JDialog,你可以使用相同的类进行进一步更新得到回应。如果你的JDialog有大量的内容要与你的父类分享,请使用它。 -
你能帮我stackoverflow.com/questions/31652594/…吗?我已经将 JFrame 更改为 JDialog。现在我有问题保存 JDialog 内容.. @guitar_freak
标签: java swing dispose jdialog