【发布时间】:2012-06-26 17:57:54
【问题描述】:
我有一个模式设置对话框,它是一个 JDialog。在这个设置窗口中,我放置了一些组件,包括一个指向另一个模态设置对话框的按钮,该对话框也是一个 JDialog。我将它们制作为 JDialogs,因为这是我所知道的制作模态对话框的唯一方法。
问题是这样的:当我创建主设置对话框时,我必须在没有父框架或父框架的情况下构建 JDialog。由于我的主窗口是一个 JFrame,我可以将它传递给主设置对话框构造函数。但是当我想创建第二个模式设置对话框时,它应该将主设置对话框作为父级,我找不到获取 JDialog 的 (J)Frame 的方法。我确实想将该主设置对话框作为父级传递,以便第二个设置对话框在显示时以它为中心。假设第二个设置对话框没有用于传递位置的构造函数,只有 JDialog 的构造函数。
有没有办法获取 JDialog 的 (J)Frame? 我的设置中是否存在设计缺陷,我是否应该为这些设置对话框使用其他东西? (如果是这样,我应该如何使这些替代设置对话框成为模态?)
感谢您的帮助, 埃里克
更新: 谢谢大家的答案。他们让我明白,显然拥有一个 JDialog 的所有者并不是绝对必要的。我认为对话框需要这样做才能禁用所有者,直到对话框关闭,但显然该模式独立于所有者。我还注意到,即使有所有者,对话框仍然不会以所有者为中心,所以现在我的代码如下:
public class CustomDialog extends JDialog {
public CustomDialog(String title) {
setModal(true);
setResizable(false);
setTitle(title);
buildGUI();
}
public Result showDialog(Window parent) {
setLocationRelativeTo(parent);
setVisible(true);
return getResult();
}
}
这也允许模态对话框中的模态对话框。
感谢您的帮助!
【问题讨论】:
-
我不会让设置窗口成为任何东西的模式。如果他们在设置窗口中工作时需要使用该应用程序怎么办?这对我来说似乎非常严格。
标签: java swing user-interface modal-dialog jdialog