我知道,这个问题在 SO 中经常出现,比如here https://stackoverflow.com/questions/4089311/how-can-i-return-a-value-from-a-jdialog-box-to-the-parent-jframe:
但我想举一些非常具体的例子......我只是不确定我是否做对了。
我有一个 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()
.
引自Javadocs http://docs.oracle.com/javase/7/docs/api/java/awt/Window.html#dispose%28%29:
通过随后调用 pack 或 show 重建本机资源,可以使 Window 及其子组件再次显示。重新创建的 Window 及其子组件的状态将与这些对象在 Window 被释放时的状态相同(不考虑这些操作之间的额外修改)。
因此,您的回复将被保留。全部dispose()
确实是释放本机屏幕资源,其他成员没有标记为垃圾回收。
另外,如果您想更加确定,您可以致电dispose()
在您检索响应对象之后。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)