如何在对话框中使用模态

Java™SE 6 解决了平台早期版本中出现的 Pattern 问题。新的模态模型使开发人员可以限制或限制对话框的模态阻塞。

在 continue 使用新的 Pattern 模型之前,请查看以下术语:

在 Java SE 6 中,Pattern 对话框和无 Pattern 对话框的行为均已更改,因此它们不仅总是出现在其父窗口以及所有阻止的窗口的顶部。

Java SE 6 支持以下 Pattern 类型:

此外,您可以设置模态排除 Pattern:

Note :

新的 Pattern 模型没有实现系统 Pattern,该系统 Pattern 会在 Pattern 对话框处于活动状态时阻止在桌面上显示的所有应用程序(包括 Java 应用程序)。

ModalityDemo 示例演示了上述四种 Pattern 类型中的前三种。

此数字已减少至适合页面大小。
单击图像以其自然尺寸查看.

Try this:

  • 单击启动按钮以使用Java™Web 开始(下载 JDK 7 或更高版本)运行 ModalityDemo。另外,要自己编译和运行示例,请查阅example index

  • 将出现以下对话框:

  • 书 1(父级画框)

  • 书 2(父级框架)

  • 反馈(父框架)

  • 经典作品(不含镜架)

  • 切换到“书本 1”框架并选择书的传记标题,然后选择“确定”。

  • 传记标题将显示在对话框的标题中。在文本字段中 Importing 名称,例如“ John”。

  • 切换到 Book 1 框架,然后将标题更改为 Funny Tale,然后选择 OK。由于 Importing 名称的对话框是* modeless ,因此您可以轻松切换到其 parent *框架。

Note :

无 Pattern 对话框标题已更改为“滑稽故事”。

  • 在无 Pattern 对话框中选择确定。

  • 出现童话文档 Pattern 对话框。

  • 在文本字段中 Importing 一些文本。请注意,它由您在无 Pattern 对话框中 Importing 的名称签名。

  • 切换到无 Pattern 对话框,然后try更改您的名称。您将无法执行此操作,因为文档 Pattern 对话框会阻止其父层次结构中的所有窗口。

  • 对 Book 2 父框架执行相同的操作序列(步骤 3-9)。

  • try切换到其他对话框。您会注意到,您可以切换到“经典”框架或“反馈”框架,也可以切换到“书本 1”框架或“书本 2”框架的对话框。

  • 切换到“反馈”父框架。选择 evaluation 自己。

  • 出现确认对话框。try切换到其他对话框。仅允许您切换到“经典”对话框,因为标准确认对话框是应用程序 Pattern 对话框,并且它阻止来自同一应用程序的所有窗口。但是,您会注意到,您可以在“古典”框架中选择自己喜欢的古典作者。该框架是使用APPLICATION_EXCLUDE模态排除类型创建的,该类型可以防止所有顶级窗口被任何应用程序 Pattern 对话框阻止。

下面的代码片段显示了如何创建不同 Pattern 类型的对话框:

//The Book 1 parent frame
f1 = new JFrame("Book 1 (parent frame)");

...

//The modeless dialog box
d2 = new JDialog(f1);

...
        
//The document-modal dialog box
d3 = new JDialog(d2, "", Dialog.ModalityType.DOCUMENT_MODAL);

...

        //The Book2 parent frame
f4 = new JFrame("Book 2 (parent frame)");

...

//The modeless dialog box
d5 = new JDialog(f4);

...

//The document-modality dialog box
d6 = new JDialog(d5, "", Dialog.ModalityType.DOCUMENT_MODAL);
        
...

//The excluded frame
f7 = new JFrame("Classics (excluded frame)");
f7.setModalityExclusionType(Dialog.ModalExclusionType.APPLICATION_EXCLUDED);
        
...

//The Feedback parent frame and Confirm Dialog box
f8 = new JFrame("Feedback (parent frame)");
...

JButton b8 = new JButton("Rate yourself");
b8.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        JOptionPane.showConfirmationDialog(null,
                                           "I really like my book",
                                           "Question (application-modal dialog)", 
                                           JOptionPane.Yes_NO_OPTION,
                                           JOptionPane.QUESTION_MESSAGE); 
    }
});

ModalityDemo.java文件中找到演示的完整代码。

在 Java SE 6 中,您可以创建一个没有父级的文档 Pattern 对话框。由于Dialog类是Window类的子类,因此Dialog实例(如果没有所有者)将自动成为文档的根。因此,如果这种对话框是文档 Pattern 的,则其阻止范围为空,并且其行为就像是无 Pattern 的对话框一样。

PatternAPI

JDialog类构造函数使您可以创建各种 Pattern 类型的对话框。

Constructor Purpose
JDialog(Dialog owner) 创建一个具有指定的Dialog所有者但没有标题的无 Pattern 对话框。
JDialog(对话框所有者,布尔 Pattern) 创建一个具有指定的Dialog所有者和方式的对话框。
JDialog(对话框所有者,字符串 标题) 创建一个具有指定的Dialog所有者和标题的无 Pattern 对话框。
JDialog(对话框所有者,字符串 标题,布尔 Pattern) 创建一个具有指定的Dialog所有者,标题和方式的对话框。
JDialog(对话框所有者,字符串 标题,布尔 Pattern,GraphicsConfiguration gc) 创建一个具有指定的Dialog所有者,标题,模态和图形配置的对话框。
JDialog(Frame owner) 创建一个没有标题的具有指定的Frame所有者的无 Pattern 对话框。如果所有者的值为 null,则将共享的隐藏框架设置为对话框的所有者。
JDialog(窗口所有者,字符串 标题,Dialog.ModalityType modalityType) 创建一个具有指定的Window所有者,标题和方式的对话框。

下表列出了从java.awt.Dialog类继承的方法。

Method Purpose
getModalityType 返回此对话框的模态类型。
setModalityType 设置此对话框的 Pattern 类型。有关可能的方式类型,请参见ModalityType。如果不支持给定的模态类型,则使用MODELESS类型。为确保已设置模态类型,请在调用此方法后调用getModalityType()方法。

使用 PatternAPI 的示例

下表列出了在对话框中使用模态的示例。

Example Where Described Notes
ModalityDemo This section 创建不同 Pattern 类型的对话框,演示这些类型的作用域阻止。
首页