|
五、 有关AWT特性
下面是其它一些在使用新的模态模态时要了解的AWT特性。
(一) 总在最上面
当一个并不总是位于顶层的模式对话框阻断一个总是位于顶层的窗口时,它们的相对Z-序未特别指出并且是平台依赖的。下列实例表明这个问题:
JFrame f = new JFrame(...); f.setAlwaysOnTop(true); f.setVisible(true); JDialog d = new JDialog(frame, "Dialog", true); d.setVisible(true); |
这段代码制造了一种矛盾:一方面,d必须位于f之上(因为它是一个模式对话框并且应该阻断f)。而另一方面,f必须必须位于d之上,因为f被设置为总是位于顶层,而d不是。如此情形是未特别指出的。然而,总是有解决办法:如果d也被设置为总是位于顶层(d.setAlwaysOnTop(true)),那么该对话框将在任何时候位于框架窗口之上。
(二) toFront()和toBack()方法
一个模式对话框应该总是位于所有的被其阻断的窗口之上。这样,如果一被阻断的窗口被送到前面,那么它的阻断对话框,如果有的话,也被送到前面并且位于被阻断的窗口之上。同样,如果一模式对话框被送到后面,那么所有它的被阻断的窗口被送到后面以使其位于阻断对话框下面。
(三) 最小化,最大化和关闭被阻断的窗口
当一个模式对话框阻断一个窗口时,用户可能无法最小化或最大化被阻断的窗口。然而,实际行为并未特别指出并且是平台依赖的。在任何情况下,用户都不能交互式地关闭被阻断的窗口。但是它能被通过编程方式关闭-通过在被阻断的窗口上调用setVisible(false)或dispose()方法。
(四) 激活被阻断的窗口
当用户选择一个被阻断的窗口时,它有可能连同阻断模式对话框一起被送到前端,然后它成为当前活动窗口。然而,实际行为并未特别指出并且是平台依赖的。
(五) 隐藏模式对话框
当具有当前焦点的模式对话框被隐藏时,它的所有者未被阻断而有可能成为活动窗口。然而,实际行为并未特别指出并且是平台依赖的。如果要被隐藏的模式对话框不具有焦点,那么活动窗口保持不变。
(六) 安全性
为了显示工具箱-模式对话框,需要一种特殊的AWTPermission,toolkitModality。例如,这将防止从applet中显示的模式对话框被浏览器或JWS(Java Web Start)的软件所阻断。
相同的权限需要用于从工具箱模态中排除一个窗口。例如,这将防止一个从applet中显示的对话框被浏览器或JWS的模式对话框所阻断。
(七) 平台支持
有两个java.awt.Toolkit方法允许你检查是否当前平台支持特定的模态特征:
·isModalityTypeSupported(modalityType),返回是否给定的模态类型为当前平台所支持。如果不支持模式M并且一个对话框被设置为M-modal,那么其行为就象一个无模态对话框。
·isModalExclusionTypeSupported(modalExclusionType),返回是否给定的模态exclusion类型为当前平台所支持。如果不支持exclusion类型E并且一个窗口被标记为E-excluded,那么这没有任何影响。
六、兼容性
默认的模态类型是应用程序模式,它被如Dialog.setModal(true),Dialog(owner,true)等API所用调用。在JDK 6以前,默认类型是工具箱-模式,但是在应用程序模态和工具箱模态之间的唯一区别在于从JWS软件中激活applet和应用程序方面。
注意:任何Java SE平台API的增加或对其说明的改进必须经JSR 270专家组的过目和同意。
上一页 [1] [2] [3] [4] [5] [6] |