Swing


          天行健 君子以自強不息

          posts - 69, comments - 215, trackbacks - 0, articles - 16
             :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          Swing DayDayUP之三:Swing組件層次結構介紹

          Posted on 2009-07-08 22:49 zht 閱讀(2759) 評論(1)  編輯  收藏 所屬分類: Swing
                   一直想寫篇關于Swing體系結構的文章,不過一直不敢下手,怕理解的有偏差,最近看了下這方面的資料,記錄下,Swing的整體組織結構如下圖所示。

          Swing程序要呈現出來,肯定要將組件放到JFrame,JDialog,JApplet,JWindow這幾個容器組件中,這些頂層容器組件,有一個共同的結構,如上圖所示,都有一個JRootPane面板來承載著所有要顯示的組件。JRootPane又有以下部分組成:
          1、GlassPane
          2、JLayeredPane
           (1)ContentPane
           (2)JMenuBar
          其中JRootPanel中的RootLayout對以上幾部分進行布局,關于這點可以參考Java的API文檔和java源碼,里面有詳細的說明。
          這里想要說的一點是,JRootPane并不是只能放在這些頂層容器中的,你也可以放在一般的組件,比如JPanel中,這樣Panel就有了層次結構,可以再其不同的層次上放置組件,這個后邊還會再講一下。
                  寫這篇文章,并不是為了講Swing的這個架構,主要是想通過講述這個架構,給大家介紹些開發過程中用的技巧。
          GlassPanel這個可能大家都了解了,比如,可以模擬Eclipse中Tab頁簽的拖拽效果,當處理一些比較費時的操作,比如加載數據時,可以用來遮罩面板,一方面可以防止用戶重復操作,另一方面可以用來顯示進度。不過有一點限制就是每個頂層容器中GlassPanel只能有一個(其實像上面提到的,如果一個面板中的組件都有一個JRootPane來承載組件,其實在一個程序中GlassPane也是可以有多個的,通過這個,GlassPanel和JLayeredPane幾乎可以達到相同的效果)。
                  JLayeredPane有了深度的概念,一般的Layout在JLayeredPane是不適用的。一個Integer來標示組件在JLayeredPane中的深度,這個值越大,就會顯示在越上面。JLayeredPane還有一個同層的上下關系,這個可以參考API或者源代碼。重要的一點是JLayeredPane默認的Layout是null,所以,放到JLayeredPane上的組件,必須要通過setBounds的形式來設置大小才會顯示出來,否則是看不到的,這點尤其要注意。JLayeredPane的層次結構能實現非常多的特效,我甚至認為,JLayeredPane 是Swing結構中,最精妙的設計之一,通過JLayeredPane我們可以實現文本的驗證提示功能,舉個例子,有一個文本框,用來輸入電話號碼,有時候可能用戶會輸入些字母,甚至是漢字,當用戶切換到下一個面板或者最后提交驗證以后,你可能希望給出一些提示來標明這些輸入非法,這時候,就可以用到JLayeredPane了,你可以將非法輸入的組件,傳遞給一個Panel,這個Panel在非法的組件旁邊繪制一個小圖標,然后讓這個Panel顯示在主界面的上面(后續會把相關代碼發出)。還有另外一個用途就是使用JInternalFrame做控制面板,可以通過JLayeredPane將一個JInternalFrame懸浮到一個面板中,既不會占用程序的空間,又不會像dialog那樣,必須要彈出來才可以。

                   附一個通過LayeredPane來顯示加載進度的例子,使用方法很簡單只需要將你的組件通過我的adapter封裝下,然后再放到你的程序中即可MaskAdapter maskPanel = MaskAdapter.getMaskpanel(panel, false);。
          下載

          主站蜘蛛池模板: 德阳市| 沅江市| 石景山区| 专栏| 永定县| 东兴市| 桃江县| 榆林市| 满城县| 时尚| 福贡县| 易门县| 武安市| 叶城县| 县级市| 江西省| 台东县| 汝州市| 纳雍县| 阜新市| 十堰市| 平谷区| 浦江县| 全州县| 凤翔县| 关岭| 安国市| 库伦旗| 阿拉善盟| 苏州市| 沭阳县| 雷波县| 乐业县| 东安县| 灌阳县| 肇州县| 宁武县| 叶城县| 扶沟县| 敦化市| 靖边县|