国产探花免费观看_亚洲丰满少妇自慰呻吟_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;
        }
    }
}
進入討論組討論。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 青岛市| 河东区| 南部县| 拉孜县| 宜宾市| 滦南县| 武陟县| 卓资县| 张家港市| 嘉峪关市| 大连市| 房山区| 沙雅县| 聂荣县| 通山县| 陈巴尔虎旗| 昌宁县| 汶上县| 普兰店市| 顺平县| 丹江口市| 阿巴嘎旗| 华宁县| 尼勒克县| 牡丹江市| 沂南县| 泸溪县| 都匀市| 自贡市| 昭通市| 泰和县| 龙游县| 牙克石市| 深州市| 安康市| 永康市| 中方县| 蕉岭县| 徐州市| 长乐市| 嘉祥县|