JDialog在其JFrame父窗口前显示

4

我希望在Java Swing中创建一个JDialog,当它打开时,其父窗口不能被访问(就像在Microsoft Word中打开文件浏览器对话框时一样)。 JDialog类中是否有提供此行为的方法?

4个回答

6
在设置对话框可见之前,请使用JDialog.setModal(true)使其模态化。
JDialog yourdialog = ...

yourdialog.setModal(true);
...

yourdialog.setVisible(true);

或者使用一个定义了模态的JDialog构造函数。 - Qwerky

3
你有两个选项:
1. 使用JOptionPane中的静态方法。这些默认会创建模态对话框。
2. 创建一个JDialog对象,然后使用它来显示对话框。
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);

第一种选择更简单,我通常更喜欢它,特别是在模态对话框中。

1

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

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

在用户界面设计中,模态窗口是一个子窗口,需要用户与之交互,然后才能返回操作父应用程序

因此,“模态”意味着它将阻止父窗口(用户无法与模态窗口以外的任何窗口交互),而“非模态”或“无模式”则意味着子窗口和父窗口将同时可访问。

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


0

如何将JDialog锁定在其JFrame父窗口中? 使用JDialog.setModal可以使jdialog像其他应用程序中的对话框一样。在jDialog关闭之前停止所有框架。


1
看起来你的答案与其他人有些不同,但并不是很清楚。我不太明白你所说的“锁定”JDialog在其父窗口内的意思。你能再解释一下你的想法吗? - RustyTheBoyRobot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接