如何在对话框中使用模态
Java™SE 6 解决了平台早期版本中出现的 Pattern 问题。新的模态模型使开发人员可以限制或限制对话框的模态阻塞。
在 continue 使用新的 Pattern 模型之前,请查看以下术语:
-
对话框-一个带有标题和边框的顶级弹出窗口,通常需要用户 Importing 某种形式的信息。对话框可以是 Pattern 对话框,也可以是非 Pattern 对话框。有关对话框的更多信息,请参见如何制作对话框页中的对话框概述。
-
模态对话框-阻止 Importing 到应用程序中其他一些顶级窗口的对话框,但以该对话框作为其所有者创建的窗口除外。模态对话框将catch窗口焦点,直到其关闭为止,通常是响应于按钮的按下。
-
无 Pattern 对话框-一个对话框,使您可以在显示此对话框时与其他窗口一起使用。
在 Java SE 6 中,Pattern 对话框和无 Pattern 对话框的行为均已更改,因此它们不仅总是出现在其父窗口以及所有阻止的窗口的顶部。
Java SE 6 支持以下 Pattern 类型:
-
无 Pattern 类型 -无 Pattern 对话框在可见时不会阻止任何其他窗口。
-
文档 Pattern 类型 —文档 Pattern 对话框阻止同一文档中的所有窗口,但其子层次结构中的窗口除外。在这种情况下,文档是共享公共祖先的窗口层次结构,称为文档根,这是没有所有者的最接近的祖先窗口。
-
应用程序 Pattern 类型 -应用程序 Pattern 对话框将阻止来自同一应用程序的所有窗口,但其子层次结构中的窗口除外。如果在浏览器环境中启动了多个 Servlets,则允许浏览器将它们视为单独的应用程序或单个应用程序。此行为取决于实现。
-
工具箱 Pattern 类型 —工具箱 Pattern 对话框会阻止在同一工具箱中运行的所有窗口,但其子层次结构中的窗口除外。如果启动了多个 Servlets,则所有 Servlets 都将使用相同的工具箱运行。因此,从 Servlets 显示的工具箱 Pattern 对话框可能会影响其他 Servlets 以及嵌入该工具箱 Java 运行时环境的浏览器实例的所有窗口。
此外,您可以设置模态排除 Pattern:
- 排除 Pattern -可以将任何顶级窗口标记为不被 Pattern 对话框阻止。此属性使您可以设置“Pattern 排除”Pattern。
Dialog.ModalExclusionType
枚举指定可能的 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 类型的对话框,演示这些类型的作用域阻止。 |