<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);。
    下載

    主站蜘蛛池模板: 777爽死你无码免费看一二区| 久久国产免费一区| 国产麻豆免费观看91| 麻豆狠色伊人亚洲综合网站| 2021国内精品久久久久精免费 | 亚洲中文字幕成人在线| 免费福利资源站在线视频| 亚洲成a人无码av波多野按摩| 亚洲av成人无码网站…| 免费a级毛片大学生免费观看| 老司机午夜性生免费福利| 亚洲高清无码综合性爱视频| 国产精品hd免费观看| 亚洲国产精品无码专区在线观看| 九九精品成人免费国产片| 亚洲国产成AV人天堂无码| 国产在线国偷精品产拍免费| 亚洲国产精品无码观看久久| 亚洲AV永久无码精品一区二区国产 | 国产午夜精品久久久久免费视 | 特级毛片在线大全免费播放| 亚洲高清无码综合性爱视频| 久久免费精品一区二区| 亚洲欧洲日产国码www| 四虎www成人影院免费观看| 一级毛片免费不卡| 久久精品亚洲精品国产色婷| 久久不见久久见免费影院| 西西人体大胆免费视频| 亚洲成色在线影院| 日韩毛片免费在线观看| 中文字幕不卡免费高清视频| 亚洲欧洲校园自拍都市| 国产免费观看网站| 无码av免费网站| 在线亚洲精品视频| 亚洲小视频在线观看| 国产伦精品一区二区三区免费迷| caoporn成人免费公开| 亚洲另类春色国产精品| 中文字幕亚洲一区|