• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 全面剖析Java 6中新型模態對話框API

    發表于:2007-07-14來源:作者:點擊數: 標簽:
    一、引言 對話框,是指一個最頂層的擁有標題和邊框的彈出窗口,典型地應用于用戶進行某種形式的輸入操作。在JDK 5.0和早期版本中,構建一個對話框時,它必須擁有一個作為它的所有者窗口的框架窗口或另一個對話框,即使窗口是不可見的。當用戶最小化一個可見
    一、引言

      對話框,是指一個最頂層的擁有標題和邊框的彈出窗口,典型地應用于用戶進行某種形式的輸入操作。在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展示了這樣的一個例子。

    全面剖析Java6中新型模態對話框API

    圖1:對話框的模態優先權


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

      三、了解新的構造器

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

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

      下面列舉的是一些比較有用的構造器:

      ·JDialog(Dialog owner)

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

      ·JDialog(Dialog owner,boolean modal)

       用指定的所有者Dialog和模態創建一個具有指定的模態和所有者對話框的對話框

      ·JDialog(Dialog owner,String title)

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

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

       創建一個具有指定的標題,模態和所有者對話框的對話框

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

       創建一個具有指定的標題,模態和所有者對話框和GraphicsConfiguration的對話框

      ·JDialog(Frame owner)

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

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

       創建一個具有指定的標題,模態和所有者窗口的對話框

      有關這里每個構造器的更多細節請參考Mustang有關文檔。

     

    [1] [2] 下一頁  

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>