日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

【引用】Java swing 組件分層介紹:JRootPane,GlassPane,LayeredPane,和ContentPane

 云中凌 2014-08-06

                      什么是Swing,什么又是lightweight component

         ---》Swing是JFC中的一部分,現(xiàn)在已被列入JAVA標(biāo)準(zhǔn)類庫里面!JFC是Java Foundation Classes的縮寫,其功能是提供程序設(shè)計(jì)者設(shè)計(jì)圖形用戶界面用的,JFC主要包括下面的5個(gè)部分:
            1,AWT組件:舊有的窗口組件包
            2,Swing組件,新的窗口組件包
            3,Accessibility API:提供一種更先進(jìn)的溝通界面。例如:語音輸入或觸摸屏幕
            4,Java 2D API:提供強(qiáng)大的圖形處理函數(shù)
            5,支持Drag and Drop功能:用于在兩個(gè)相同的java界面,甚至是Java與其他應(yīng)用程序界面作數(shù)據(jù)交換的操作。

         ---》我們常聽到許多人說Swing是lightweight component,而AWT是hevayweight component。這是什么意思呢?其實(shí),是指Swing是由純Java Code 所寫成的。因此Swing解決了Java 因窗口類而無法跨平臺(tái)的問題,使窗口功能也具有跨平臺(tái)與延展性。而且Swing不需占有太多系統(tǒng)資源,因此我們稱Swing為
lightweight component.

              相對于Swing,AWT是hevayweight component。由于AWT具有native Code 的C語言成分,所以若想自改動(dòng)AWT的窗口變化時(shí),必須編寫自己的C語言native Code,然后搭配AWT 的native Code與JDK函數(shù)庫存。遇到不同的平臺(tái)時(shí),又必須重新理發(fā)與編譯自己所寫的native code.因此AWT不具有跨平臺(tái)特性,耗時(shí)且難以理解又耗系統(tǒng)資源,所以就稱之為hevayweight component,表示AWT組件是不容易改動(dòng)的。


       Swing中幾乎所有的組件都是lightweight component,除了JFrame,JDialog,JWindow與JApplet這四個(gè)組件是hevayweight component外。
==========================================================================================

                                                     Swing 的版面結(jié)構(gòu)


            Swing中的所有l(wèi)ightweight component都繼承自JComponent(抽象類),除了JFrame,JDialog,JWindow與JApplet這四個(gè)組件是hevayweight component外!JFrame繼承原有的AWT中的Frame類;JApplet繼承原有的AWT中的Applet類。
    
     JFrame,JDialog,JWindow與JApplet這四個(gè)組件我們統(tǒng)稱為最上層(Top-Level)組件,因?yàn)槠溆嗟腟wing組件都必須依附在此四組件之一上才能顯示出來。
     最上層的四個(gè)組件都實(shí)現(xiàn)了RootPaneContainer接口,另外還有一個(gè)類也實(shí)現(xiàn)了此接口,就是JInternalFrame,它也是一個(gè)lightweight component,但它不是最上層的組件,也就是說JInternalFrame不能單獨(dú)顯示出來,必須依附在最上層組件中。接口RootPaneContainer定義了各種容器取得與設(shè)置的方法,這里的容器包括JRootPane,GlassPane,LayeredPane,和ContentPane.四個(gè)上層組件類中都有一個(gè)字段名為rootPane,rootPane是JRootPane類型的,但JRootPane并不是真實(shí)的容器,我們不能在JRootPane上加入任何的組件!要加必須加在LayeredPane 或者是LayeredPane 里的ContentPane上。
             另外,組件必須加在容器中,容器本身也是一種組件,因此,我們可以簡單的理解成:先把組件放在容器中,再把容器依附在上層組件中顯示出來!四個(gè)上層組件中,只包含JRootPane容器,如果要加入組件,可以先取得JRootPane的GlassPane,LayeredPane,和ContentPane中相應(yīng)的一個(gè)容器,然后進(jìn)行添加組件的操作!若JRootPane不是我們想要的容器,要用到其它的容器,必須先把其它的容器加進(jìn)來。其它的容器都直接或者間接繼承于Container
            使用 JComponent 的 getRootPane 方法可獲取包含給定組件的 JRootPane,下面,用樹形結(jié)構(gòu)來簡單介紹下JRootPane的組成結(jié)構(gòu),并非繼承結(jié)構(gòu):


           JRootPane
              --Glass Pane
              --Layered Pane
                 --Content Pane
                 --Menu Bar

由上面的結(jié)構(gòu)樹,我們可以看到JRootPane包含有Glass Pane 與 Layered Pane,而Layered Pane又包含有Content Pane與Menu Bar,其中程序設(shè)計(jì)者可選擇是否使用Menu Bar,若沒有使用Menu Bar,則Content Pane就會(huì)占據(jù)整個(gè)版面。

Glass Pane:它是一個(gè)透明的面版,主要功能是它或以捕獲JFrame上的任何事件。GlassPane的默認(rèn)值是不可看見的,不過可以將它設(shè)為看見的(visible),例如若要在GlassPane上做繪圖的工作,就可以在Glass Pane上顯示出來!

Layered Pane:它是一個(gè)可以重疊組件的面版,本身就是一個(gè)容器,可以將它看成是相當(dāng)多層的置物架,每一層都可以放置物品,而且上面的物品會(huì)遮隹下面的物品。

Content Pane:是最重要的,且是最常到的容器。它是LayeredPane 中的一層,一般視為最底層。通常我們會(huì)將組件放在ContentPane上,而不會(huì)加在LayeredPane中,因?yàn)槿魧⒔M件加入LayeredPane中必須自選管理組件間層次的關(guān)系,這會(huì)加重程序維護(hù)的困難度??鄬⒔M件放入ContentPane,對于像工具欄(ToolBar),PopupMenu等組件,Java會(huì)自動(dòng)高速其層次關(guān)系。

=====================================================================

                                               JFrame

  當(dāng)建立一個(gè)JFrame組件時(shí),系統(tǒng)會(huì)為此JFrame 建立JRootPane組件,我們就可以任意地取得JRootPane上的Glass Pane , Layered Pane或Content Pane,然后進(jìn)行其它的操作。

在舊版本的JDK中,要使用JFrame,我們?nèi)粝朐谒厦婕尤肫渌慕M件必須先取得JFrame的ContentPane,然后將要加入的組件放在ContentPane中,假如我們要在JFrame上加入一個(gè)JButton,就得象下面這么用:

               JFrame frame = new JFrame();

               Container contentPane = frame.getContentPane();

              JButton button = new JButton();

            contentPane.add(button);

而新版本的JDK,直接在JFrame中可以調(diào)用add(組件)來添加組件,組件將被添加到 contentPane。內(nèi)容窗格始終是非 null 的。試圖將其設(shè)置為 null 會(huì)導(dǎo)致 JFrame 拋出異常。默認(rèn)的內(nèi)容窗格上會(huì)設(shè)置有 BorderLayout 管理器。另外還增加了一個(gè)新方法:de style="line-height: normal;"<de<

public void setDefaultCloseOperation(int operation)
設(shè)置用戶在此窗體上發(fā)起 "close" 時(shí)默認(rèn)執(zhí)行的操作。必須指定以下選項(xiàng)之一:

  • de style="line-height: normal;"<DO_NOTHING_ON_CLOSEde<(在 de style="line-height: normal;"<WindowConstantsde< 中定義):不執(zhí)行任何操作;要求程序在已注冊的 de style="line-height: normal;"<WindowListenerde< 對象的 de style="line-height: normal;"<windowClosingde< 方法中處理該操作。
  • de style="line-height: normal;"<HIDE_ON_CLOSEde<(在 de style="line-height: normal;"<WindowConstantsde< 中定義):調(diào)用任意已注冊的 de style="line-height: normal;"<WindowListenerde< 對象后自動(dòng)隱藏該窗體。
  • de style="line-height: normal;"<DISPOSE_ON_CLOSEde<(在 de style="line-height: normal;"<WindowConstantsde< 中定義):調(diào)用任意已注冊 de style="line-height: normal;"<WindowListenerde< 的對象后自動(dòng)隱藏并釋放該窗體。
  • de style="line-height: normal;"<EXIT_ON_CLOSEde<(在 de style="line-height: normal;"<JFramede< 中定義):使用 de style="line-height: normal;"<Systemde< de style="line-height: normal;"<exitde< 方法退出應(yīng)用程序。僅在應(yīng)用程序中使用。

默認(rèn)情況下,該值被設(shè)置為 de style="line-height: normal;"<HIDE_ON_CLOSEde<。

==========================================================================

                          Java GUI的繼承體系

ortant; zoom: 1 !important; filter: none; font-size: 12px; line-height: normal;"<Java swing 組件分層介紹:JRootPane,GlassPane,LayeredPane,和ContentPane - zjx_cn - zjx_cn學(xué)習(xí)筆記
ortant; zoom: 1 !important; filter: none; font-size: 12px; line-height: normal;"<

從上圖我們可以看出:JComponent直接繼承于Container(容器),由于Swing中所有的組件都直接或者間接繼承于此類,因此,Swing中的組件都具有容器類的特點(diǎn),即可以在組件上放文字,圖片等信息。而AWT中的組件都繼承于Component,但不一定會(huì)繼承于Container,所以AWT中的組件就不會(huì)都具有容器的特點(diǎn)。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請遵守用戶 評(píng)論公約

    類似文章 更多