2010-09-14 61 views
3

我想在Java Swing中创建一个JDialog,当它打开时,其父窗口无法访问(就像在Microsoft Word中打开文件资源管理器对话框时一样)。 JDialog类中是否有提供此行为的方法?JDialog在它的JFrame父类

回答

6

使用JDialog.setModal设置对话框中可见

JDialog yourdialog = ... 

yourdialog.setModal(true); 
... 

yourdialog.setVisible(true); 
+0

或使用定义模态的JDialog构造函数之一。 – Qwerky 2010-09-14 16:00:45

3

前(真)你有两种选择:

使用在JOptionPane静态方法。这些将在默认情况下创建模式对话框:

Window parentWindow = SwingUtilities.getWindowAncestor(parentPanel); 
JOptionPane.showMessageDialog(parentWindow, "Hello, World); // Create modal dialog aligned with parent window. 

创建JDialog明确:

Window parentWindow = SwingUtilities.getWindowAncestor(parentPanel); 
JDialog dlg = new JDialog(parentWindow, ModalityType.APPLICATION_MODAL); 

第一个选项是简单得多,我更愿意它特别模态对话框。

0

如何在他的JFrame Parent中锁定JDialog? 的确如此,使用JDialog.setModal能够使jdialog就像其他应用程序上的对话一样。停止所有框架bofore jDialog关闭

+1

看起来你有一个与其他人有点不同的答案,但它不是很清楚。我并不真正了解你的意思是在它的父代中“锁定”一个JDialog。你能解释一下你的想法吗? – RustyTheBoyRobot 2012-06-11 14:59:34

1

Adamski和Jan都已经有了正确的答案,但我想确保模态窗口的概念得到解释。

OP询问了一个阻止访问父对象的对话框。这被称为模态对话框(或模态窗口)。维基百科给出this definition

在用户界面设计,模态窗口是一个子窗口,要求用户与它进行交互,才可以返回到操作父应用

所以,“莫代尔”的意思它将阻止父窗口(用户不​​能与除模态窗口之外的任何窗口交互),而“非模态”或“无模式”意味着子窗口和父窗口将同时可访问。

这是一个概念,通常存在于GUI框架中,而不仅仅是Swing框架。在您使用的任何GUI框架中,您可以通过查找modal属性来找到这种功能。