gr8vyguy@Blogjava

          使用Layout組織SWT的控件 - 1

          SWTComposite可以使用Layout來(lái)對(duì)其子控件進(jìn)行布局SWT 提供了5 種布局方式: FillLayout, RowLayout, GridLayout, FormLayoutStackLayout。你也可以定義自己的Layout 。下面將分別介紹這5 Layout 以及怎樣定義一個(gè)新的Layout

          FillLayout

          FillLayoutSWT中最簡(jiǎn)單的Layout 類(lèi)它把控件以相同的大小分布在單行或者單列上FillLayout不會(huì)自動(dòng)換行或者換列。通過(guò)參數(shù)你可以指定頁(yè)邊空白和控件之間距離的大小。

          比如下面的代碼

          FillLayout layout = new FillLayout(SWT.HORIZONTAL);
          layout.marginWidth 
          = 50;
          layout.marginHeight 
          = 100;
          layout.spacing 
          = 20;

                  
          將指定如下圖的 Layout

          1.jpg 

          如果使用SWT.VERTICAL控件將被安置在一列上。不指定什么參數(shù),如果只貼加一個(gè)控件將填滿窗口。

          用Composite.setLayout(layout)
          方法可以指定一個(gè)Composite Layout

          FillLayout是按照子控件被貼加的順序?qū)ψ涌丶M(jìn)行布局的,準(zhǔn)確地講是以子控件保存在Composite中順序。而改變一個(gè)子控件的Z 順序 ( moveAbove或者moveBelow) 會(huì)改變子控件的順序。下面的例子演示了這一點(diǎn),當(dāng)你點(diǎn)一下按鈕時(shí),兩個(gè)按鈕會(huì)交換位置。

               public   static   void  main(String[] args) {
                  
          final  Display display  =   new  Display();
                  
          final  Shell shell  =   new  Shell(display);

                  shell.setLayout(
          new  FillLayout());
                  Button btn1 
          =   new  Button(shell, SWT.PUSH);
                  Button btn2 
          =   new  Button(shell, SWT.PUSH);
                  btn1.setText(
          " Button A " );
                  btn2.setText(
          " Button B " );

                  Listener listener 
          =   new  Listener() {
                      
          public   void  handleEvent(Event event) {
                          ((Button) event.widget).moveAbove(
          null );
                          shell.layout();
                      }
                  };
                  btn1.addListener(SWT.Selection, listener);
                  btn2.addListener(SWT.Selection, listener);

                  shell.open();
                  
          while  ( ! shell.isDisposed()) {
                      
          if  ( ! display.readAndDispatch())
                          display.sleep();
                  }
                  display.dispose();
              }

          程序如下圖

              2.jpg

              Namenlos.jpg

          SWT要求一個(gè)Layout 的實(shí)例(Instance)只能指定給一個(gè)Composite應(yīng)該避免將同一個(gè)Layout 實(shí)例指定給多個(gè)Composite FillLayout不需要另外對(duì)每個(gè)子控件指定LayoutData ,而后面講到的另外4 個(gè)布局類(lèi)會(huì)需要LayoutData ,同樣的, LayoutData 的實(shí)例也是不能被多個(gè)子控件所共享的,因?yàn)?/span>Layout有可能會(huì)在LayoutData 中緩沖子控件的位置大小信息,以提高性能。FillLayout是非常簡(jiǎn)單的布局算法,多用來(lái)放置一個(gè)子控件填滿父窗口,而布置多個(gè)控件在一行或者一列用RowLayout比較實(shí)用。下一節(jié)講RowLayout。


          轉(zhuǎn)載請(qǐng)保留http://www.aygfsteel.com/xilaile/archive/2007/02/17/100096.html


          posted on 2007-02-17 00:50 gr8vyguy 閱讀(4673) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): Java

          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導(dǎo)航

          統(tǒng)計(jì)

          公告

        1. 轉(zhuǎn)載請(qǐng)注明出處.
        2. msn: gr8vyguy at live.com
        3. 常用鏈接

          留言簿(9)

          隨筆分類(lèi)(68)

          隨筆檔案(80)

          文章分類(lèi)(1)

          My Open Source Projects

          搜索

          積分與排名

          最新評(píng)論

          主站蜘蛛池模板: 宝应县| 斗六市| 黄平县| 柳林县| 修武县| 华安县| 资阳市| 白河县| 宝清县| 上饶市| 红原县| 稻城县| 吴忠市| 运城市| 磐安县| 慈溪市| 德清县| 白城市| 明水县| 临汾市| 南涧| 弥渡县| 常德市| 洞头县| 伽师县| 仁化县| 静安区| 和静县| 余姚市| 东光县| 古丈县| 包头市| 炎陵县| 临潭县| 博爱县| 泸州市| 丰台区| 乐清市| 南通市| 灌南县| 衡阳县|