SWT佈局管理器使用以及配置
文章還不夠完善,後續會慢慢補充
1 定義
GUI:圖形使用者介面
SWT: 平穩小波變換,或者靜態小波變換,開源IDE-eclipse就是用SWT開發的
SWT的所有的類都在org.eclipse.swt下
SWT:與 AWT/SWING 不相伯仲,但是元件更為豐富,平臺表現穩定, BUG 也相對較少(相對而言) 。
如果你的應用程式真的需要在多個平臺上執行,需要更為美觀的介面,又不那麼依賴於其他
基於 AWT/SWING 的圖形庫
2 屬性
SWT組成:
1 本地庫:負責與作業系統通訊
2 顯示類:作為SWT與GUI的通訊介面
3 一個Shell類,程式的頂層視窗
元件可以用方法 setBounds (int x, int y, int width, int height) 來指定該元件相對於父元件
的位置和元件的大小。元件的這種定位方式稱為絕對定位。
SWT的佈局管理器:
一些佈局管理器只使用它們自身的引數就可以控制,而另一些佈局管理器還需要其它引數( LayoutData ),該引數是在設定佈局管理器的複合元件中的每個控制元件上指定的。 SWT中常用的佈局管理器有如下一些:
1. 充滿式佈局FillLayout
FillLayout :充滿式佈局,在容器中以相同的大小以單行或單列排列元件。沒有FillData類
1) 構造方法:
FillLayout() 建立按一行充滿容器的物件。
FillLayout(int type) 建立按指定型別充滿容器的物件,指定型別 (type )有:
SWT.HORIZONTAL按一行充滿容器。 SWT.VERTICAL 按一列充滿容器。
2) 屬性:
marginWidth:用來設定視窗中最頂端的一行元件和最底端的一行元件在垂直方向距離容器的上邊框和下邊框的距離
marginHeight,:用來設定容器中最左邊的一列元件和最右邊的一列元件在水平方向距離容器的左邊框和右邊框的距離 Spacing
2. 行列式佈局RowLayout
RowLayout :行列式佈局,以單行或多行的方式定製元件的排列方式。可以使元件折行顯示,可以設定邊界距離和間距。另外,還可以對每個元件通過 setLayoutData()方法設定 RowData 物件。RowData 用來設定元件的大小。
1) 構造方法:
RowLayout() 建立按行放置元件的物件。
RowLayout(int type) 建立按指定型別放置元件的物件。指定型別 (type )有:
SWT.VERTICAL 按列放置元件。 SWT.HORIZONTAL按行放置元件。
2).常用屬性:
int marginWidth:元件距容器邊緣的寬度(畫素),預設值為 0。
int marginHeight:元件距容器邊緣的高度(畫素),預設值為 0。
int marginTop:元件距容器上邊緣的距離 (畫素),預設值為 3。
int marginBottom:元件距容器下邊緣的距離 (畫素),預設值為 3。
int spacing:元件之間的距離,預設值為 3。
booleanjustify:如果該屬性為 true,則元件間的距離隨容器的拉伸而變大。預設值為false。
booleanwrap:如果該屬性為 true,則當容器空間不足時會自動折行;如果該屬性為 false,不自動折行。預設值為 true。
booleanpack:如果該屬性為 true,元件大小為設定值;如果該屬性為 false,則強制元件的大小相同。預設值為 true。
int type:使元件按指定式樣放置,(type=SWT.HORIZONTAL|SWT.VERTICAL ),預設為按行放置,預設值為 SWT.HORIZONTAL。
3 RowData 類:
RowData稱為 RowLayout 的佈局數 類,可用於改變容器中元件的外觀形狀。其構造方法:
RowData(intwidth,int height);
3. 網格式佈局GridLayout
GridLayout :網格式佈局,以網格的方式進行佈局,元件可以佔用指定的一個或幾個網格。
把容器分成網格,把元件放置在網格中。GridLayout 有很多可配置的屬性,有專用的佈局數類GridData,GridLayout 強大之處在於它可以通過 GridData 來設定每個元件的外觀形狀。GridLayout 的構造方法無引數,
l New GridLayout()預設佈局將容器設定成一列所有元件在容器中從上至下均排成一列
l New GridLayout(int num,Boolean columnsEqual)設定列數和是否等寬
1 GridLayout 的屬性
int numColumns:設定容器的列數,元件從左到右按列放置,當元件數大於列數時,下一個元件將自動新增新的一行。預設值為 1 列。
boolean makeColumnsEqualWidth:強制使列都具有相同的寬度,預設值為 false。
int horizontalSpacing:設定列與列之間的間隔,預設值為 5。
int verticalSpacing:設定行與行之間的間隔,預設值為 5。
intmarginWidth:設定最左邊或最右邊元件與容器邊緣的水平距離,預設值為 5。
intmarginHeight:設定頂部或底部元件與容器邊緣的垂直距離,預設值為 5。
marginLeft:用來控制左邊的一列元件與左邊框的距離
marginTop:用來控制頂部元件與上邊框的距離
marginRight:用來控制右邊的一列元件與右邊框的距離
marginBottom用來設定底部元件與底邊框的距離
2.佈局數 類 (GridData 類)
GridData 是 GridLayout 專用的佈局數類,用 GridData 可以構建很多複雜的佈局方式。
①GridData 的構造方法如下:
GridData(); 建立一個屬性值為預設值的物件。
GridData(inttype); 建立一個指定型別(type )的物件。
② GridData 常用型別如下:
GridData.FILL 通常與 GridData 類的物件屬性 horizontalAlignment 和 verticalAlignment配合使用,充滿物件屬性指定的空間。
GridData.FILL_HORIZONTAL 水平充滿,元件充滿網格水平方向的空間。
GridData.FILL_VERTICAL 垂直充滿,元件充滿網格垂直方向的空間。
GridData.FILL_BOTH 雙向充滿,元件充滿水平和垂直方向的空間。
GridData.HORIZONTAL_ALIGN_BEGINNING水平對齊靠左,元件在網格中靠左放
置。
GridData.HORIZONTAL_ALIGN_CENTER水平對齊居中,元件在網格中居中放置。
GridData.HORIZONTAL_ALIGN_END水平對齊靠右,元件在網格中靠右放置。
③ GridData 常用物件屬性:
inthorizontalSpan 設定元件佔用的列數,預設值為 1。
intverticalSpan 設定元件佔用的行數,預設值為 1。
heightHint:用來設定元件的高度
widthHint:用來設定元件的寬度
grabExcessHorizontalSpace:設定元件在水平方向所佔的空間
grabExcessVerticalSpace:設定元件在垂直方向所佔的空間
horizontalIndent:設定元件向右移動如果為負值則向左移動但是元件本身大小不變
verticalIndent:設定元件向下移動如果為負值則向上移動但是元件本身大小不變
horizontalAlignment 設定元件的對齊方式為水平方向。
verticalAlignment 設定元件的對齊方式為垂直方向。
horizontalAlignment和verticalAlignment 可以取以下值:
l BEGINNING 開始 (水平對齊時居左;垂直對齊時居上)----- horizontalAlignment的預設值
l CENTER 居中------- verticalAlignment的預設值
l END 結束 (水平對齊時居右;垂直對齊時居下)
l FILL 充滿
4. 表格式佈局FormLayout
FormLayout :表格式佈局,通過定義元件四個邊的距離來排列元件,被引用的相對的元件可以是父元件,也可以是同一容器中的其它元件。
表格式佈局(FormLayout 類)是一種非常靈活、精確的佈局方式,這個佈局是 SWT2.0版新增的。FormLayout 也有專用的佈局數類 FormData ,此外,還增加了一個FormAttachment類。FormAttachment 定義了元件的四邊與父容器(Shell、Composite 等 )
的邊距,為保證元件在父容器中的相對位置不變,FormAttachment 類用不同的構造方法來實現元件的定位,用 FormData 和 FormAttachment 配合,可以建立複雜的界,而且當主窗體大小改變時,元件的相對位置能保持相對不變。FormLayout的構造方法:FormLayout()。
1 FormLayout 的屬性
int marginWidth:設定元件與容器左邊緣或右邊框的水平距離 --對應的是左邊和右邊的空白大小.空白的預設值是0
int marginHeight:設定元件與容器邊緣的垂直距離---頂部和底部的空白大小, 預設值為 0。
int marginTop:效果同marginHeight
int marginLeft:效果同marginWidth
例如,以下程式碼把父容器 (shell)的四周邊距都設定成 10 畫素。
Display display = new Display();
Shell shell = newShell(display);
FormLayout formlayout= newFormLayout ();
formlayout.marginHeight = 10;
formlayout.marginWidth = 10;
shell.setLayout (formlayout);
2 FormData 類
①FormData 的預設構造方法
FormData(int width,intheight) 引數 width 和 height 設定元件的寬度和高度。
②FormData 的屬性配合FormAttachment設定自適應
width 設定元件的寬度。
height 設定元件的高度。
top 和FormAttachment 配合設定元件頂部和父容器頂部的邊距。
bottom 和FormAttachment 配合設定元件底部和父容器底部的邊距。
left 和 FormAttachment配合設定元件左邊和父容器左邊的邊距。
right 和FormAttachment 配合設定元件右邊和父容器右邊的邊距。
如果 FormData 中的 width 和 height 設定的寬度和高度與 FormAttachment 設定的約束髮生衝突,則按照 FormAttachment 設定,width 和 height 的設定值就不起作用了。
3 FormAttachment 類
Attachment 的含義是附著、貼上。FormAttachment類就是用來指定元件在父容器中的貼上位置。FormAttachment 計算元件貼上位置和元件大小的方法是依下 的表示式:
y = ax + b
表示式中 y 是縱座標,從上往下是正方向;x 是橫座標,從左至右是正方向;a 是斜率
(a=m/n,n≠0 ), b 是偏移量,沿 x、y 軸正方向的偏移量為正,反之為負。.
①FormAttachment 的構造方法
FormAttachment() 元件緊貼父容器的左邊緣和上邊緣,如果父容器設定了 FormLayout屬性 marginWidth 和 marginHeight ,則距父容器的上邊緣和左邊緣為 marginHeight和marginWidth 的設定值。
l FormAttachment(Control control, int offset) 以指定的元件 control 為參照物,相對指定元件的偏移量為 offset。
l FormAttachment(Control control, int offset,int alignment)以指定的元件 control 為參照物,相對指定元件的偏移量為 offset,對齊方式為 alignment 。alignment 的取值如下:SWT.TOP、SWT.BOTTOM、SWT.LEFT、SWT.RIGHT、SWT.CENTER , alignment也可理解為參考control參照物的某一方面引數設定,在此基礎上進行偏移offset
l FormAttachment(int m,int n, int offset) 以元件相對於父容器寬度或高度的百分 (即斜率 a)來給元件定位,m 為 a 的分子,n 為 a 的分母,offset 是偏移量。
l FormAttachment(int m, int offset) 以元件相對於父容器寬度或高度的百分比 (即斜率 a)來設定元件的偏移量,m 為 a 的分子,a 的分母為預設值 100,offset是偏移量。
例如: data.right = new FormAttachment(100,-20);元件相對於Shell容器右邊框向左移動20個畫素
l FormAttachment(int m) 以元件相對於父容器寬度或高度的百分比 (即斜率 a)來給元件定位,m 為 a 的分子,a 的分母為預設值 100,偏移量為預設值 0。
注:FormData最多包含4個FormAttachment 例項,每個對應了與它聯絡的部件的一邊.另外,FormData也可以指定寬和高.表四列出了FormData的資料成員: Attribute
FormAttachment bottom用來指定部件的底部位置
FormAttachment left用來指定部件的左部位置
FormAttachment right用來指定部件的右部位置
FormAttachment top用來指定部件的頂部位置
注:當你生成一個FormData物件,你可以自己傳給它寬和高的值.如果你沒有指定FormAttachment物件,部件會自動以parent composite的上邊界和左邊為起始邊界.如果你這樣定義了多個部件,它們會都在composite的左上角.