这些Java教程是针对JDK 8编写的。本页面中描述的示例和实践不利用后续版本引入的改进,并且可能使用不再可用的技术。
请参阅Java语言更改,了解Java SE 9及其后续版本中的更新语言功能的摘要。
请参阅JDK发布说明,了解所有JDK版本的新功能、增强功能以及已删除或已弃用选项的信息。
Java™ SE 6已解决了在早期版本中出现的模态问题。新的模态模型使开发人员能够对对话框的模态阻塞进行范围或限制。
在继续使用新的模态模型之前,请查看以下术语:
在Java SE 6中,模态和非模态对话框的行为已经更改,以便它们始终出现在其父窗口和所有阻塞窗口的顶部。
Java SE 6支持以下模态类型:
此外,您可以设置模态排除模式:
Dialog.ModalExclusionType
枚举指定可能的模态排除类型。ModalityDemo示例演示了上面提到的四种模态类型中的前三种。
APPLICATION_EXCLUDE
模态排除类型,可以防止任何应用程序模态对话框阻塞所有顶层窗口。以下代码片段显示了如何创建不同模态类型的对话框:
//图书1父框架 f1 = new JFrame("图书1(父框架)"); ... //非模态对话框 d2 = new JDialog(f1); ... //文档模态对话框 d3 = new JDialog(d2, "", Dialog.ModalityType.DOCUMENT_MODAL); ... //图书2父框架 f4 = new JFrame("图书2(父框架)"); ... //非模态对话框 d5 = new JDialog(f4); ... //文档模态对话框 d6 = new JDialog(d5, "", Dialog.ModalityType.DOCUMENT_MODAL); ... //排除框架 f7 = new JFrame("经典著作(排除框架)"); f7.setModalityExclusionType(Dialog.ModalExclusionType.APPLICATION_EXCLUDED); ... //反馈父框架和确认对话框 f8 = new JFrame("反馈(父框架)"); ... JButton b8 = new JButton("评价自己"); b8.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JOptionPane.showConfirmationDialog(null, "我真的喜欢我的书", "问题(应用程序模态对话框)", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); } });
在ModalityDemo.java
文件中可以找到完整的示例代码。
在Java SE 6中,您可以创建一个没有父级的文档模态对话框。因为Dialog
类是Window
类的子类,所以如果一个Dialog
实例没有所有者,它会自动成为文档的根。因此,如果这样的对话框是文档模态的,它的阻塞范围为空,它的行为就像一个非模态对话框。
JDialog
类的构造函数可以创建不同模态类型的对话框。
构造函数 | 目的 |
---|---|
JDialog(Dialog owner) | 创建一个指定Dialog所有者但没有标题的非模态对话框。 |
JDialog(Dialog owner, boolean modal) | 创建一个具有指定Dialog所有者和模态性的对话框。 |
JDialog(Dialog owner, String title) | 创建一个指定Dialog所有者和标题的非模态对话框。 |
JDialog(Dialog owner, String title, boolean modal) | 创建一个具有指定Dialog所有者、标题和模态性的对话框。 |
JDialog(Dialog owner, String title, boolean modal, GraphicsConfiguration gc) | 创建一个具有指定Dialog所有者、标题、模态性和图形配置的对话框。 |
JDialog(Frame owner) | 创建一个指定Frame所有者但没有标题的非模态对话框。如果所有者的值为null,则将设置一个共享的隐藏框架作为对话框的所有者。 |
JDialog(Window owner, String title, Dialog.ModalityType modalityType) | 创建一个具有指定Window所有者、标题和模态性的对话框。 |
下表列出了从java.awt.Dialog类继承的方法。
方法 | 目的 |
---|---|
getModalityType | 返回此对话框的模态类型。 |
setModalityType | 设置此对话框的模态类型。请参见ModalityType以获取可能的模态类型。如果给定的模态类型不受支持,则使用MODELESS 类型。要确保模态类型已设置,请在调用此方法后调用getModalityType() 方法。 |
以下表格列出了使用对话框中的模态的示例。
示例 | 所述位置 | 注释 |
---|---|---|
ModalityDemo |
本节 | 创建不同模态类型的对话框,演示了这些类型的作用域阻塞。 |