国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

SWT中模擬AWT的BorderLayout

2019-11-18 15:34:03
字體:
來源:轉載
供稿:網友
    BorderLayout 是 JFrame 的默認布局類,相信大家都用過,SWT沒有提供這個java程序員非常熟悉的Layout類。我們怎們來自己定義一個呢?首先要稍微了解一下Layout的內部實現原理。
 SWT中模擬AWT的BorderLayout

   Layouts 是一個容器用來對其子成員布局的一個算法,符合 Strategy Design Pattern . 當 SWT 打開一個 Composite 時,會調用 Composite 里的 layout.computeSize() 計算 Composite 的大小,然后再調 用 layout.layout() 設置子成員的位置和大小 . 假如需要, layout 會調用子成員的 getLayoutData() 來獲得單個子成員非凡的屬性。

computeSize() 和 layout() 是抽象類 Layout 的兩個抽象方法。

   要定義一個新的 layout ,也就是要定義一個 Layout 的子類, 實現 computeSize 和 layout. 對 BorderLayout 來說,我們需要區分子控件是在哪個位置的 , 是 WEST 的,還是 EAST 的,還是 CENTER 的,這個屬性通過 Control.setLayoutData() 方法保存的各個控件里。

廢話少說了,先看源代碼


Code highlighting PRodUCed by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->public   class  BorderLayout  extends  Layout {
     private  Control north;
     private  Control south;
     private  Control east;
     private  Control west;
     private  Control center;

     protected   void  getControls(Composite composite) {
        Control[] children  =  composite.getChildren();
         for  ( int  i  =   0 , n  =  children.length; i  <  n; i ++ ) {
            Control child  =  children[i];
            BorderData borderData  =  (BorderData) child.getLayoutData();
             if  (borderData  ==  BorderData.NORTH)
                north  =  child;
             else   if  (borderData  ==  BorderData.SOUTH)
                south  =  child;
             else   if  (borderData  ==  BorderData.EAST)
                east  =  child;
             else   if  (borderData  ==  BorderData.WEST)
                west  =  child;
             else
                center  =  child;
        }
    }
}
進入討論組討論。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 库尔勒市| 红原县| 镇坪县| 上蔡县| 白水县| 桐城市| 长子县| 五指山市| 石家庄市| 荆州市| 微山县| 崇阳县| 鹤壁市| 宣城市| 安图县| 新营市| 出国| 伊通| 林周县| 漳浦县| 民和| 平武县| 铜梁县| 连云港市| 舞钢市| 青田县| 日喀则市| 抚松县| 浏阳市| 思茅市| 女性| 普安县| 大理市| 呼图壁县| 乐东| 民和| 平阳县| 鹤峰县| 资溪县| 郧西县| 射阳县|