組件裝在容器里,那么這些組件是如何布局的呢?在這之前所有的例子都是使用setBounds來 進行絕對坐標的定位的.
在實際應用過程中大都是采用布局管理器的方式來布局容器中的組件.
布局管理器定義了組件的擺放方式.
為什么VB,Delphi程序不需要布局管理器,而Java GUI程序卻需要的呢?
因為Java開發程序的目標是要跨平台的.而每一個操作系統的屏幕定義是不同的.
如果像VB,Delphi那樣使用絕對坐標定位界面組件,那么在Windows下看着好好的界面,到了Linux和MacOS上就會變得一塌糊塗.
除非你開發的JavaGUI程序只在Windows下用,但是即使這樣,在不同分辨率下,界面的形狀也會不大一樣.
布局管理器:
分為:
1.充滿式(FillLayout類) 充滿式布局管理器,組件的大小會盡量的充滿整個容器
把組件擺放成一行或者一列,並強制組件大小一致.里面的組件都會盡量的充滿這個容器.
另外FillLayout不能折行,不能設置邊界距離和間距.
FillLayout一般使用於任務欄,工具欄,Group中的一組復選框,或者容器內只有一個組件的時候.
如果一個Shell中只有一個Group組件,那么將FillLayout用於shell.則其內的Group將完全充滿Shell.
FillLayout雖然功能單一,但是其自動充滿窗口的方式,在SWT界面設計總還是很常用的.
2.行列式(RowLayout類) 行列式布局管理器,簡單的排列組件.
RowLayout可以是組件折行顯示.並可以設置邊界和間距.
另外,它還可以對每個組件通過setLayoutData方法設置RowData對象,RowData用來設置組件的大小.
使用rowLayout.wrap控制自動拆行(默認值true)
使用SWT.VERTICAL式樣控制排列方式
使用rowLayout.pack控制組件大小(默認值true)
使用rowLayoutjustify控制控件伸展(默認是false)
要想改變按鈕本身的外觀.則需要使用RowData類,RowData成為布局數據類.
為RowLayout專用,在講GridLayout類時,它也有一個專用的布局數據類GridData.
GridData的目的也是和RowData一樣,即改變容器中的組件和外觀形狀.
RowData最常用的定義格式是:new RowData(int width,int heigh)
例如:RowData rowData = new RowData(10,30)表示應用了這個rowData的組件將改變其大小,
變成寬10像素,高30像素.
3.網格式(GridLayout類) 網格式布局管理器,非常強大,可以勝任所有的布局.
GridLayout可能是最常用的,功能最強大的標准布局類,當然也最復雜,
GridLayout的布局方式是把容器中的組件擺放在一個個格子里,它有許多設置項,並且同RowLayout一樣也有
專用的布局數據類GridData.GridData的使用頗為復雜,
而GridLayout強大之處也在於它可以通過GridData來設置每一個組件外觀形狀.
GridLayout類的基本實例
使用gridLayout.numColumns設置列數(默認值1)
使用makeColumnsEqualWidth把組件等距分開(默認false)
使用MarginWidth,Marginheight,HorizontalSpacing,VerticalSpaciong屬性
4.堆棧式(StackLayout類) 像書頁一樣,只顯示最前面的組件.
5.表格式(FormLayout類) 表格式布局管理器,通過創建組件各個邊的距離來布局組件,和GridLayout一樣強大.
使用marignWidth,marginHeight設置邊距(這兩個屬性,來設置容器的左邊距和上邊距(單位:像素))
使用FormData的構造函數(FormLayout也有自己的布局數據類,他的使用方法是new FormData()或new FormData(int width,int height))
FormAttachment類的用法
FormAttachment是在FormData下的,更進一步的布局數據類,它的用法主要體現在它不同的構造函數中.