<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Swing


    天行健 君子以自強(qiáng)不息

    posts - 69, comments - 215, trackbacks - 0, articles - 16
       :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
             一直想寫篇關(guān)于Swing體系結(jié)構(gòu)的文章,不過一直不敢下手,怕理解的有偏差,最近看了下這方面的資料,記錄下,Swing的整體組織結(jié)構(gòu)如下圖所示。

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

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

    主站蜘蛛池模板: 十八禁无码免费网站| 亚洲色偷精品一区二区三区| 国产va免费观看| 国产在线观看免费视频播放器 | 亚洲无人区一区二区三区| 一级毛片免费播放男男| 久久久久久A亚洲欧洲AV冫| 人妻仑乱A级毛片免费看| 亚洲情侣偷拍精品| baoyu122.永久免费视频| 精品国产亚洲一区二区三区| 免费a级毛片无码a∨免费软件 | 亚洲日韩人妻第一页| 久草免费福利在线| 亚洲国产精品久久久久婷婷软件 | 亚洲狠狠婷婷综合久久| 你好老叔电影观看免费| 免费在线观看污网站| 国产精品永久免费| 亚洲中文久久精品无码ww16| 国产高潮流白浆喷水免费A片 | 亚洲人成影院在线无码观看| 春意影院午夜爽爽爽免费| 亚洲女人被黑人巨大进入| 一道本不卡免费视频| 亚洲色欲一区二区三区在线观看 | 亚洲美女又黄又爽在线观看| a级毛片在线视频免费观看| 久久久久亚洲AV成人无码| 2019中文字幕免费电影在线播放| 久久亚洲国产精品成人AV秋霞| 巨波霸乳在线永久免费视频| 亚洲一区二区三区亚瑟| 免费黄色大片网站| 深夜特黄a级毛片免费播放| 亚洲人成无码www久久久| 四虎国产精品免费永久在线| 精品亚洲成AV人在线观看| 啦啦啦手机完整免费高清观看| 精品一区二区三区免费毛片| 亚洲中文字幕无码一区|