布局是swt中很重要的乙個部分。畢竟人家swt主要做的是ui,什麼東西放在什麼地方就是他們的主要工作。所以我主要看了一下布局相關的東西,並和大家一起分享一下。
layout包中主要提供了連帶上面我們所講過的filllayout方式總共4種方式的布局型別。分別為:
l filllayout(充滿式布局,通常都對只有
一、兩個物件時使用,上面已經介紹過)
l rowlayout(簡單排列式布局,由於功能太弱可以完全被gridlayout取代。我一會簡單介紹一下)
l gridlayout(網格式布局,是我們常用的一種布局。它相當於將乙個螢幕看成是乙個大的**,然後對其進行具體的分配)
l stacklayout(堆疊式布局,通常用於幾個重疊物件的交替顯示)
rowlayout類是簡單布局類,下面給出乙個例子:
package swt.examples;
import .eclipse.swt.swt;
import .eclipse.swt.graphics.devicedata;
import .eclipse.swt.layout.rowlayout;
import .eclipse.swt.widgets.button;
import .eclipse.swt.widgets.display;
import .eclipse.swt.widgets.shell;
public class rowlayout
display.dispose();}}
具體效果如左下圖:
右邊圖是當引數為swt.vertical時的情況。
gridlayout常被稱為**布局。它主要有gridlayout物件類與griddata兩個部分共同組合構成。其中gridlayout類主要負責對整體布局效果的設定,numcolumns負責對每行總格數的設定,
verticalspacing
、horizontalspacing
分別負責對水平與垂直間距的設定,
makecolumnsequalwidth
代表水平平分。
下面我們也用乙個簡單的例子來說明它的具體用法。
package swt.examples;
import .eclipse.swt.swt;
import .eclipse.swt.graphics.devicedata;
import .eclipse.swt.layout.griddata;
import .eclipse.swt.layout.gridlayout;
import .eclipse.swt.widgets.display;
import .eclipse.swt.widgets.shell;
import .eclipse.swt.widgets.text;
public class gridlayout
display.dispose();}}
具體效果如下圖:
從上面的例子可以看出,gridlayout相當於乙個**,而griddata相當於**中的單元格,我們可以通過控制gridlayout來控制建立個每行多少列的**、**的邊距是多少,在通過griddata來設定每個單元格具體是什麼樣子的、是否需要水平或垂直合併單元格、每個單元格具有什麼樣一種拉伸屬性等等。
stacklayout是堆疊式顯示方式顧名思義,就是說某個位置有一堆東西,然後你去選擇使用哪乙個。下面我們還是舉個小例子
package swt.examples;
import .eclipse.swt.swt;
import .eclipse.swt.custom.stacklayout;
import .eclipse.swt.events.mouseevent;
import .eclipse.swt.events.mouselistener;
import .eclipse.swt.graphics.color;
import .eclipse.swt.graphics.rgb;
import .eclipse.swt.layout.filllayout;
import .eclipse.swt.layout.griddata;
import .eclipse.swt.layout.gridlayout;
import .eclipse.swt.widgets.button;
import .eclipse.swt.widgets.composite;
import .eclipse.swt.widgets.display;
import .eclipse.swt.widgets.shell;
public class stacklayout
public void mouseup(mouseevent e)
public void mousedown(mouseevent e)
});btn1.addmouselistener(new mouselistener()
public void mouseup(mouseevent e)
public void mousedown(mouseevent e)
});}
public void open()
display.dispose();
}public static void main(string args)
}具體效果如下圖:
如上例所示stacklayout方法使用很簡單,不需要什麼特殊的設定,只是你需要通過設定你的stacklayout物件的topcontrol屬性為你要顯示的控制項名即可。而且需要記住,每當你設定過topcontrol屬性以後都需要將你的父物件(在上例中為composite)重新layout一下。這樣它才能重新整理顯示。同時在上例中我們提到了事件的用法,我們將會在下面的篇幅對swt中的事件處理進行簡單的介紹。
SWT布局管理器
filllayout 充滿式布局管理器,元件的大小會盡量的充滿整個容器。rowlayout 行列式布局管理器,簡單的排列元件 gridlayout 網格式布局管理器,非常強大,可以勝任所有的布局。formlayout 是布局管理器,通過建立元件各個邊的距離來布局元件,和 gridlayout 一樣強...
SWT布局管理器
filllayout 充滿式布局管理器,元件的大小會盡量的充滿整個容器。rowlayout 行列式布局管理器,簡單的排列元件 gridlayout 網格式布局管理器,非常強大,可以勝任所有的布局。formlayout 是布局管理器,通過建立元件各個邊的距離來布局元件,和 gridlayout 一樣強...
SWT中的Layout總結
1.filllayout 最簡單的layout,它把各種control按照行和列排列,並且每行或每列中各個control大小相同.並且是填 滿擁有這個layout的composite 2.rowlayout 與filllayout非常相似,它也是把各種control按照行和列排列,但是它不強迫每個c...