国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設(shè)計 > 正文

Java 6中新型模態(tài)對話框API

2019-11-18 10:42:47
字體:
供稿:網(wǎng)友

  一、引言

  對話框,是指一個最頂層的擁有標題和邊框的彈出窗口,典型地應用于用戶進行某種形式的輸入操作。在JDK 5.0和早期版本中,構(gòu)建一個對話框時,它必須擁有一個作為它的所有者窗口的框架窗口或另一個對話框,即使窗口是不可見的。當用戶最小化一個可見對話框的所有者窗口時會自動隱藏該對話框;而當用戶隨后恢復所有者窗口時,該對話框再次出現(xiàn)。

  一個對話框可以是無模式的也可以是模式的。除了該對話框的所有者的窗口之外,模式對話框?qū)⒆柚乖趹贸绦蛑衅渌攲哟翱诘妮斎搿DJ綄υ捒虿蹲酱翱诮裹c直到其被關(guān)閉為止(經(jīng)常響應于一次按鈕點擊)。另一方面,一個無模式對話框答應用戶改變它的狀態(tài),而此時其它窗口仍然可擁有焦點。后者常用于工具欄窗口中,例如你在一個圖像編輯程序中所見的。

  在JDK 5.0和早期版本中的模態(tài)模型有一些局限。而且,這種模態(tài)模型也存在一些問題。最聞名的問題涉及到javaHelp工具窗口。JavaHelp,Java應用程序中提供幫助信息的API,使用獨立的窗口來顯示所有的必要信息。然而,假如應用程序顯示任何模式對話框,例如一標準Save As對話框,那么該對話框?qū)⒆柚褂脩襞cJavaHelp工具窗口進行交互。

  但是Java 6,代碼名稱為Mustang,已經(jīng)通過一種新的抽象窗口工具箱(AWT)模態(tài)模型解決了此問題以及其它幾個問題。這種新型模型答應開發(fā)者根據(jù)其選擇的模態(tài)類型指定范圍或限制一個對話框的模態(tài)阻斷。如此模態(tài)類型也答應窗口和對話框成為真正的無父窗口,也即,擁有一個null父窗口,它可以幫助限制窗口的范圍和對話框的模態(tài)。

  二、模態(tài)類型

  Java 6支持四種模態(tài)類型:

  ·無模式。無模式對話框在自己為可見時并不阻斷任何其它窗口。

  ·文檔-模式。文檔-模式對話框阻斷所有的來自同一文檔的窗口,除了那些來自于它的子層次上的窗口外。在此意義中,一個文檔是指一個窗口層次-框架窗口,對話框等等,它們共享一個文檔根窗口。文檔根窗口是所有沒有所有者的最頂級窗口。

  ·應用程序-模式。應用程序-模式對話框能夠阻斷同一應用程序中的所有窗口,除了那些來自于它的子層次上的窗口外。假如在瀏覽器中激活若干applet,那么瀏覽器將把它們當作獨立的應用程序或者作為一個單一的應用程序。具體情況依靠實現(xiàn)的具體環(huán)境。

  ·工具箱-模式。工具箱-模式對話框能夠阻斷所有的運行于同樣的工具箱中的窗口,除了那些來自于它的子層次上的窗口外。假如激活多個applet,那么它們都運行于同樣的工具箱上。因此,從applet中顯示的工具箱-模式對話框可能影響其它的applet。

  正如以前的JDK一樣,一個對話框在缺省情況下是無模式的。但是假如你在Mustang中構(gòu)造一個模式對話框的話,現(xiàn)在它將缺省使用應用程序-模式類型。另外,模式和無模式對話框的行為已經(jīng)在Mustang作了改變,它們可以一直出現(xiàn)在其父窗口的頂部。

  模態(tài)優(yōu)先權(quán)是由阻斷強度決定的。這種模態(tài)優(yōu)先權(quán)幫助處理兩個對話框可見并且能夠彼此阻斷的情形。優(yōu)先權(quán)按升序排列分別是:無模式,文檔-模式,應用程序-模式和工具箱-模式。這種優(yōu)先權(quán)自然地反映了一個對話框的范圍阻斷的嵌套情形。一個無模式對話框有一個空范圍的阻斷。文檔-模式對話框的范圍阻斷是在特定的應用程序中完成的,并且所有的應用程序是運行于一種工具箱中。圖1展示了這樣的一個例子。

Java 6中新型模態(tài)對話框API(圖一)
圖1:對話框的模態(tài)優(yōu)先權(quán)

  注重,這種新型的模態(tài)模型并沒有實現(xiàn)一個系統(tǒng)模態(tài),這將會阻斷(Java或其它)所有被顯示在桌面上的應用程序,而只有一個模式對話框處于活動狀態(tài)。

  三、了解新的構(gòu)造器

  能提供真正無父窗口而不中斷向后兼容對于AWT開發(fā)小組來說是一個挑戰(zhàn)。在JDK 5.0及以前的版本中,答應傳遞null作為JDialog或Jwindow的父窗口。這意味著,一不可見的共享所有者的框架窗口將成為這個對話框或窗口的父窗口。這個共享所有者的框架窗口的創(chuàng)建是為了創(chuàng)建無父窗口對話框。這種情況直到Java SE 6才得以成功-Java SE 6引入了新型的文檔-模式對話框能夠阻止所有的窗口使用相同的文檔。

  因而,工具箱會知道這樣的對話框或窗口是沒有null父窗口的。在Mustang中,仍然答應傳遞null作為一個父窗口到舊式的JDialog或JWindow構(gòu)造器中。并且這可以完成相同的事情:其成為共享的所有者框架窗口而不是成為父窗口,這也照顧了向后兼容問題。然而,現(xiàn)在能把null傳遞到Dialog或Window構(gòu)造器中,而且也能傳遞到新的JDialog或JWindow構(gòu)造器中,這意味著這些對話框能夠真正成為無父窗口。

  下面列舉的是一些比較有用的構(gòu)造器:

  ·JDialog(Dialog owner)

   創(chuàng)建一個無標題并用一個指定的對話框作為其父窗口的無模式對話框

  ·JDialog(Dialog owner,boolean modal)

   用指定的所有者Dialog和模態(tài)創(chuàng)建一個具有指定的模態(tài)和所有者對話框的對話框

  ·JDialog(Dialog owner,String title)

   創(chuàng)建一個具有指定的標題和所有者對話框的無模式對話框

  ·JDialog(Dialog owner,String title,boolean modal)

   創(chuàng)建一個具有指定的標題,模態(tài)和所有者對話框的對話框

  ·JDialog(Dialog owner,String title,boolean modal,GraphicsConfiguration gc)

   創(chuàng)建一個具有指定的標題,模態(tài)和所有者對話框和GraphicsConfiguration的對話框

  ·JDialog(Frame owner)

   創(chuàng)建一個無標題但用指定的框架作為其所有者的無模式對話框

  ·JDialog(Window owner,String title,Dialog.ModalityType modalityType)

   創(chuàng)建一個具有指定的標題,模態(tài)和所有者窗口的對話框

  有關(guān)這里每個構(gòu)造器的更多細節(jié)請參考Mustang有關(guān)文檔。
  四、 與所有者窗口一同工作

  如前面所提及的,當一個窗口或一個對話框是另一個窗口的父親時,就稱為該父組件"擁有"它的孩子。在此,當在新的模態(tài)模式下與所有者窗口一同工作時,你應該注重幾件事情:

  ·創(chuàng)建一個沒有所有者的文檔-模式對話框。在這種情況中,因為Dialog是Window的一個子類;所以,假如一個Dialog實例沒有所有者的話,它自動地成為該文檔的根。這樣,假如這個對話框是文檔-模式的,那么它的阻斷范圍是空的,并且其行為就象一個無模式對話框。

  ·創(chuàng)建一個有所有者的應用程序-模式或工具箱-模式對話框。一個應用程序-模式或文檔-模式對話框的阻斷范圍并不依靠它的所有者。在這種情況中,所有者所唯一影響的是Z-順序(頂級組件的相對順序)。假如你有兩個窗口,一個遮住另一個,第一個窗口位于第二窗口上面,那么最頂端的窗口通常是一個活動的窗口。一個相關(guān)概念是"總是位于頂層",這時一個窗口總是出現(xiàn)在系統(tǒng)中所有其它窗口之上。對話框總是會位于它的所有者的上部。

  ·在運行時刻改變模態(tài)類型。改變一可見的對話框的模態(tài)類型可能沒有什么影響,直到該對話框被隱蔽并且被再次顯示。

  下列代碼實例展示了新型的模態(tài)API的應用,其中包括現(xiàn)在可靈活在應用于對話框窗口的java.awt.Dialog.ModalExclusionType和 java.awt.Dialog.ModalityType。圖2顯示出當你運行該代碼后的最終結(jié)果。

import java.awt.*;
import java.awt.event.*;
import sun.awt.*;
public class ModalityDemo2 {
// 第一個文檔(red):框架,無模式對話框,文檔-模式對話框
PRivate static Frame f1;
private static Dialog d11;
//……省略,詳見所附源碼文件
Java 6中新型模態(tài)對話框API(圖二)
圖2: 被阻斷的和未被阻斷的對話框



發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 北海市| 米易县| 许昌县| 乐至县| 南江县| 卓资县| 海城市| 天门市| 庆元县| 吴旗县| 苗栗县| 克拉玛依市| 望谟县| 神木县| 如皋市| 兰州市| 禹州市| 青河县| 四川省| 虎林市| 曲周县| 万安县| 玛沁县| 乐清市| 彭州市| 繁峙县| 广昌县| 修文县| 措勤县| 陇南市| 临漳县| 云南省| 丹巴县| 张家港市| 洛阳市| 焉耆| 山东| 曲沃县| 平邑县| 监利县| 凭祥市|