Java 6中新型模态对话框API解析

一、引言

对话框,是指一个最顶层的拥有标题和边框的弹出窗口,典型地应用于用户进行某种形式的输入操作。在JDK 5.0和早期版本中,构建一个对话框时,它必须拥有一个作为它的所有者窗口的框架窗口或另一个对话框,即使窗口是不可见的。当用户最小化一个可见对话框的所有者窗口时会自动隐藏该对话框;而当用户随后恢复所有者窗口时,该对话框再次出现。

一个对话框可以是无模式的也可以是模式的。除了该对话框的所有者的窗口之外,模式对话框将阻止在应用程序中其它顶层窗口的输入。模式对话框捕获窗口焦点直到其被关闭为止(经常响应于一次按钮点击)。另一方面,一个无模式对话框允许用户改变它的状态,而此时其它窗口仍然可拥有焦点。后者常用于工具栏窗口中,例如你在一个图像编辑程序中所见的。

在JDK 5.0和早期版本中的模态模型有一些局限。而且,这种模态模型也存在一些问题。最著名的问题涉及到JavaHelp工具窗口。JavaHelp,Java应用程序中提供帮助信息的API,使用独立的窗口来显示所有的必要信息。然而,如果应用程序显示任何模式对话框,例如一标准Save As对话框,那么该对话框将阻止用户与JavaHelp工具窗口进行交互。

但是Java 6,代码名称为Mustang,已经通过一种新的抽象窗口工具箱(AWT)模态模型解决了此问题以及其它几个问题。这种新型模型允许开发者根据其选择的模态类型指定范围或限制一个对话框的模态阻断。如此模态类型也允许窗口和对话框成为真正的无父窗口,也即,拥有一个null父窗口,它可以帮助限制窗口的范围和对话框的模态。

二、模态类型

Java 6支持四种模态类型:

无模式。无模式对话框在自己为可见时并不阻断任何其它窗口。

文档-模式。文档-模式对话框阻断所有的来自同一文档的窗口,除了那些来自于它的子层次上的窗口外。在此意义中,一个文档是指一个窗口层次-框架窗口,对话框等等,它们共享一个文档根窗口。文档根窗口是所有没有所有者的最顶级窗口。

应用程序-模式。应用程序-模式对话框能够阻断同一应用程序中的所有窗口,除了那些来自于它的子层次上的窗口外。如果在浏览器中激活若干applet,那么浏览器将把它们当作独立的应用程序或者作为一个单一的应用程序。具体情况依赖实现的具体环境。

工具箱-模式。工具箱-模式对话框能够阻断所有的运行于同样的工具箱中的窗口,除了那些来自于它的子层次上的窗口外。如果激活多个applet,那么它们都运行于同样的工具箱上。因此,从applet中显示的工具箱-模式对话框可能影响其它的applet。

正如以前的JDK一样,一个对话框在缺省情况下是无模式的。但是如果你在Mustang中构造一个模式对话框的话,现在它将缺省使用应用程序-模式类型。另外,模式和无模式对话框的行为已经在Mustang作了改变,它们可以一直出现在其父窗口的顶部。

模态优先权是由阻断强度决定的。这种模态优先权帮助处理两个对话框可见并且能够彼此阻断的情形。优先权按升序排列分别是:无模式,文档-模式,应用程序-模式和工具箱-模式。这种优先权自然地反映了一个对话框的范围阻断的嵌套情形。一个无模式对话框有一个空范围的阻断。文档-模式对话框的范围阻断是在特定的应用程序中完成的,并且所有的应用程序是运行于一种工具箱中。图1展示了这样的一个例子。

图1:对话框的模态优先权

注意,这种新型的模态模型并没有实现一个系统模态,这将会阻断(Java或其它)所有被显示在桌面上的应用程序,而只有一个模式对话框处于活动状态。

时间: 2024-08-30 11:29:14

Java 6中新型模态对话框API解析的相关文章

asp.net中的模态对话框

asp.net|对话框 终于开始写B/S的程序.今天遇到了一个问题, 如何处理模态对话框.具体的要求是:在选择页面上的"添加"按钮,弹出模态对话框,在对话框中添加记录后,选择"确定"按钮,关闭对话框,更新主页面表格的数据. 网上关于模态对话框的讨论有很多,试了一天,发现一个比较好的解决方法: 1.显示对话框: 在javascript脚本文件中加入: function OpenEditWin(frmWin,width,height) { var me; // 把父页面

Java编程中更新XML文档的常用方法

xml|编程 本文简要的讨论了Java语言编程中更新XML文档的四种常用方法,并且分析这四种方法的优劣.其次,本文还对如何控制Java程序输出的XML文档的格式做了展开论述. JAXP是Java API for XML Processing的英文字头缩写,中文含义是:用于XML文档处理的使用Java语言编写的编程接口.JAXP支持DOM.SAX.XSLT等标准.为了增强JAXP使用上的灵活性,开发者特别为JAXP设计了一个Pluggability Layer,在Pluggability Laye

Java编程中更新XML文档的常用方法_JSP编程

  本文简要的讨论了Java语言编程中更新XML文档的四种常用方法,并且分析这四种方法的优劣.其次,本文还对如何控制Java程序输出的XML文档的格式做了展开论述. JAXP是Java API for XML Processing的英文字头缩写,中文含义是:用于XML文档处理的使用Java语言编写的编程接口.JAXP支持DOM.SAX.XSLT等标准.为了增强JAXP使用上的灵活性,开发者特别为JAXP设计了一个Pluggability Layer,在Pluggability Layer的支持之

使用javascript打开模态对话框

1. 标准的方法 <script type="text/javascript"> function openWin(src, width, height, showScroll){ window.showModalDialog (src,"","location:No;status:No;help:No;dialogWidth:"+width+";dialogHeight:"+height+";scrol

介绍两种WEB下的模态对话框的实现

概述 在如今互联网网站上,AJAX效果风靡一时,应该说AJAX技术在未来几年不会动摇,在AJAX效果中,模态对话框是比较常见的效果,也是非常适用的.在这里我给大家介绍或者说是展示一下我自己的做的两种模态对话框: 效果 方法一 本方法是采用ASP.NET AJAX的扩展控件:ASP.NET AJAX Control Tool Kit中的ModalPopupExtender控件实现的: 第一步,我们先创建一个ASP.NET页面:ModalPopup.aspx 页面代码: 1<%@ Page Lang

javascript showModalDialog模态对话框使用说明_javascript技巧

1. 标准的方法 复制代码 代码如下: <script type="text/javascript"> function openWin(src, width, height, showScroll){ window.showModalDialog (src,"","location:No;status:No;help:No;dialogWidth:"+width+";dialogHeight:"+height+&

利用javascript打开模态对话框(示例代码)_javascript技巧

1. 标准的方法 复制代码 代码如下: <script type="text/javascript">   function openWin(src, width, height, showScroll){   window.showModalDialog (src,"","location:No;status:No;help:No;dialogWidth:"+width+";dialogHeight:"+heig

Java中的Calendar日历API用法完全解析_java

第一部分 Calendar介绍Calendar 定义: public abstract class Calendar implements Serializable, Cloneable, Comparable<Calendar> {} Calendar 可以看作是一个抽象类. 它的实现,采用了设计模式中的工厂方法.表现在:当我们获取Calendar实例时,Calendar会根据传入的参数来返回相应的Calendar对象.获取Calendar实例,有以下两种方式: (1) 当我们通过 Cale

Java中关于XML的API惊鸿一瞥

xml 简单介绍一下Java关于xml的API,这样大家看到了缩写就知道是干什么的了.水平有限,多多包涵. 1.JAXP(Java API for XML Parsing) 2.JAXB(Java API for XML Binding) 3.JAXM(Java API for XML Messaging) 4.JAX-RPC(Java API for XML-RPC) 1.JAXP定义了在Java中使用DOM, SAX, XSLT的通用的接口.这样在你的程序中你只要使用这些通用的接口,当你需要