Java程序設(shè)計(jì)之swt教程_第1頁
Java程序設(shè)計(jì)之swt教程_第2頁
Java程序設(shè)計(jì)之swt教程_第3頁
Java程序設(shè)計(jì)之swt教程_第4頁
Java程序設(shè)計(jì)之swt教程_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第4章SWT圖形用戶界面本章要點(diǎn)1.SWT程序開發(fā)步驟。2.SWT常用組件的使用。3.SWT的布局。4.SWT的事件處理。5.SWTDesigner簡介。本章難點(diǎn)1.SWT常用組件的使用。2.SWT的布局。3.SWT的事件處理。4.1SWT/JFace 簡介SWT(StandardWidgetToolkit)即標(biāo)準(zhǔn)小窗口工具箱,是 IBM公司推出的一種在 Eclipse中使用的集成開發(fā)環(huán)境, SWT提供可移植的 API,并與底層本機(jī) OSGUI平臺(tái)緊密集成,它是一個(gè)與本地窗口系統(tǒng)集成在一起的小部件集和圖形庫。 SWT由JNI(JavaNativeInterface,Java本機(jī)接口)調(diào)用操作系統(tǒng)的內(nèi)部 API,因此運(yùn)行速度快,能夠獲得與操作系統(tǒng)的內(nèi)部應(yīng)用程序相同的外觀。JFace是一個(gè)用戶界面工具箱,也是一個(gè)易用、功能強(qiáng)大的圖形包,它簡化了常見的圖形用戶界面的編程任務(wù)。 SWT和JFace都是Eclipse平臺(tái)上的主要組件。 JFace是在SWT的基礎(chǔ)上創(chuàng)建的,但JFace并不能完全覆蓋

SWT

的功能,

JFace和

SWT

的關(guān)系如圖

4.1所示。由于

JFace的功能更強(qiáng)大,因此做圖形界面開發(fā)時(shí)一般優(yōu)先選用

JFace。圖4.1JFace和SWT的關(guān)系程序開發(fā)步驟在eclipse的序列號(hào),不同的

plugins目錄下,找到文件,文件名中中eclipse版本這兩個(gè)數(shù)字也不同。在 DOS

是eclipse的版本號(hào),v3235是SWT狀態(tài)下,用jar命令將該文件解壓,命令格

的式如下:jarxf該命令將指定的文件解壓到當(dāng)前目錄下。解壓后得到四個(gè)

DLL

文件:

swt-win32-3235.dll

,swt-awt-win32-3235.dll

,swt-gdip-win32-3235.dll

swt-wgl-win32-3235.dll

。這四個(gè)文件就是

SWT

的原生庫文件。原生庫文件為 SWT通過JNI訪問windows本地API提供了接口,為使 Java程序在啟動(dòng)時(shí)能夠訪問這些文件,可以通過以下方法進(jìn)行設(shè)置:方法一:將這四個(gè) DLL文件復(fù)制到 jre的bin目錄下。方法二:設(shè)置環(huán)境變量,在 PATH中加入這幾個(gè) dll文件所在的目錄。方法三:在 eclipse的Java項(xiàng)目中導(dǎo)入原生庫文件。操作方法是:在eclipse的包資源管理器中,右單擊項(xiàng)目名→導(dǎo)入→常規(guī)→文件系統(tǒng)→下一步→瀏覽→選擇 DLL文件所在目錄 →確定→勾選DLL文件→完成。導(dǎo)入SWT的原生庫文件后,還要在 eclipse的Java項(xiàng)目中配置構(gòu)建路徑,添加外部 JAR,將文件加入到項(xiàng)目中,操作方法是:在eclipse的包資源管理器中,右單擊項(xiàng)目名 →構(gòu)建路徑→配置構(gòu)建路徑 →庫(L)→添加外部JAR→在eclipse的plugins文件夾中找到該 jar文件→打開→確定。例4.1在Java應(yīng)用程序中使用SWT的組件。操作步驟:新建一個(gè)Java項(xiàng)目,項(xiàng)目名為:sample4_1。②采用方法三在項(xiàng)目中導(dǎo)入原生庫文件。③配置構(gòu)建路徑,將加入到項(xiàng)目中。eclipse包資源管理器可以看到導(dǎo)入的原生庫文件和引入的jar文件,如圖 4.2所示。④在項(xiàng)目中新建一個(gè)類,文件名為 HelloSWT.java。⑤在類文件中寫入代碼。圖4.2 包資源管理器 圖4.3 程序運(yùn)行結(jié)果HelloSWT.java

文件內(nèi)容如下:packageedu.ch4;importimportimportimportimportclass HelloSWT{public static void main(String[]args){Displaydisplay= newDisplay(); //創(chuàng)建一個(gè)display 對(duì)象。Shellshell= newShell(display); //shell 是程序的主窗體shell.setLayout(null); // 設(shè)置shell 的布局方式Texthello= newText(shell,SWT. MULTI); //聲明一個(gè)可以顯示多行信息的文本框shell.setText( "Java應(yīng)用程序"); //設(shè)置主窗體的標(biāo)題shell.setSize(200,100); //設(shè)置主窗體的大小Colorcolor= newColor(Display. getCurrent(),255,255,255); //聲明顏色對(duì)象shell.setBackground(color); //設(shè)置窗體的背景顏色hello.setText( "Hello,SWTWorld!\n\n 你好,SWT世界!");//設(shè)置文本框信息hello.pack(); //自動(dòng)調(diào)整文本框的大小//shell.pack();// 自動(dòng)調(diào)整主窗體的大小shell.open(); //打開主窗體while(!shell.isDisposed()){ //如果主窗體沒有關(guān)閉則一直循環(huán)if(!display.readAndDispatch()){ //如果display 不忙display.sleep(); //休眠}}display.dispose();

//銷毀display}}在包資源管理器中,右單擊文件名

HelloSWT.java→運(yùn)行方式→

Java

應(yīng)用程序,程序運(yùn)行結(jié)果如圖4.3

所示。該窗體具有典型的 Windows風(fēng)格。分析本例的源代碼,可以看到,創(chuàng)建一個(gè)典型的①創(chuàng)建一個(gè) Display

SWT

應(yīng)用程序需要以下步驟:②創(chuàng)建一個(gè)或多個(gè) Shell③設(shè)置Shell的布局④創(chuàng)建Shell中的組件⑤用open()方法打開 Shell窗體⑥寫一個(gè)事件轉(zhuǎn)發(fā)循環(huán)⑦銷毀display中的包SWT

Eclipse圖形

API

的基礎(chǔ),本節(jié)簡單介紹一下

SWT

中常用的包。1.dgetsShell

最常用的組件基本都在此包中,如 Button、Text、Label、Combo等。其中兩個(gè)最重要的組件是和Composite。Shell相當(dāng)于應(yīng)用程序的主窗體; Composite是容納組件的容器,相當(dāng)于 SWING中的

Panel對(duì)象。2.主要的界面布局方式在此包中。

SWT

對(duì)組件的布局也采用了

AWT/SWING

中的

Layout

LayoutData

結(jié)合的方式。3.對(duì)一些基本圖形組件的擴(kuò)展在此包中,比如其中的

CLabel

就是對(duì)標(biāo)準(zhǔn)

Label

組件的擴(kuò)展,在CLabel

上可以同時(shí)加入文字和圖片。在此包中還有一個(gè)新的布局方式

StackLayout。4.SWT采用了和 AWT/SWING 一樣的事件模型,在包中可以找到事件監(jiān)聽類和相應(yīng)的事件對(duì)象。比如,鼠標(biāo)事件監(jiān)聽器 MouseListener,MouseMoveListener等,及對(duì)應(yīng)的事件對(duì)象 MouseEvent。5.此包中包含針對(duì)圖片、光標(biāo)、字體或繪圖

API。比如,可通過

Image類調(diào)用系統(tǒng)中不同類型的圖片文件。6.對(duì)不同平臺(tái),

SWT

有一些針對(duì)性的

API。例如,在

Windows

平臺(tái),可以通過此包很容易的調(diào)用OLE

組件,這使得

SWT

程序也可以內(nèi)嵌

IE瀏覽器或

Word、Excel

等程序。4.2SWT/JFace 常用組件SWT/JFace常用組件有按鈕(Button類)、標(biāo)簽(Label類)、文本框(Text類)、下拉框(Combo類)和列表框(List類)等。按鈕組件按鈕(Button)組件是

SWT

中最常用的組件,

Button

類的構(gòu)造方法是:Button(Compositeparent,intstyle)該方法有兩個(gè)參數(shù):第一個(gè)參數(shù) parent是指Button創(chuàng)建在哪一個(gè)容器上。 Composite(面板)是最常用的容器, Shell(窗體)繼承自 Composite,此參數(shù)也能接受 Shell和任何繼承自 Compsite的類。第二個(gè)參數(shù) style用來指定 Button的式樣。SWT組件可以在構(gòu)造方法中使用式樣( style)來聲明組件的外觀形狀和文字的式樣。SWT組件的構(gòu)造方法和 Button類相似,參數(shù)的含義也相同。1.Button組件常用式樣SWT.PUSH:按鈕。SWT.CHECK:多選按鈕。SWT.RADIO:單選按鈕。SWT.ARROW:箭頭按鈕。SWT.NONE:默認(rèn)按鈕。SWT.CENTER:文字居中,與

SWT.NONE

相同。SWT.LEFT:文字靠左。SWT.RIGHT:文字靠右。SWT.BORDER:深陷型按鈕。SWT.FLAT:平面型按鈕。一個(gè)Button也可以指定多個(gè)式樣,只要將指定的各個(gè)式樣用符號(hào)“

|”連接起來即可。如:Buttonbt=newButton(shell,SWT.CHECK|SWT.BORDER|SWT.LEFT);表示創(chuàng)建的按鈕 bt是一個(gè)復(fù)選按鈕( CHECK),深陷型(BORDER)、文字左對(duì)齊( LEFT)。寬度

2.Button組件的常用方法setText(Stringstring):設(shè)置組件的標(biāo)簽文字。setBounds(intx,inty,intwidth,intheight) :設(shè)置組件的坐標(biāo)位置和大小(width,組件高度 height)。

x軸坐標(biāo),

y軸坐標(biāo),組件setEnabled(Booleanenabled):設(shè)置組件是否可用。

true:可用(默認(rèn)值),false:不可用。setFont(Fontfont):設(shè)置文字的字體。setForeground(Colorcolor):設(shè)置前景色。setBackgrount(Colorcolor):設(shè)置背景色。setImage(Imageimage):設(shè)置顯示的圖片。setSelection(Booleanselected):設(shè)置是否選中(僅對(duì)復(fù)選框或單選框有效)

。true:選中,

false:未選中(默認(rèn)值)。setToolTipText(Stringstring)

:設(shè)置鼠標(biāo)停留在組件上時(shí)出現(xiàn)的提示信息。以上方法在其他組件中也可使用。例4.2按鈕示例。按照例4.1的操作步驟建立項(xiàng)目、設(shè)置構(gòu)建路徑和引入原生庫。類

Sample4_2.java

源代碼如下:packageedu.ch4;importimportpublic

class

Sample4_2{public

static

void main(String[]args){Displaydisplay=

newDisplay();

//創(chuàng)建一個(gè)

display

對(duì)象。Shellshell=newShell(display);//shell是程序的主窗體//shell.setLayout(null);//設(shè)置shell的布局方式shell.setText("按鈕示例");//設(shè)置主窗體的標(biāo)題Buttonbt1=newButton(shell,SWT.NULL);//創(chuàng)建默認(rèn)按鈕bt1.setText("SWT.NULL");//設(shè)置按鈕上的文字bt1.setBounds(10,10,75,30);//設(shè)置按鈕顯示位置及寬度、高度Buttonbt2=newButton(shell,SWT.PUSH|SWT.BORDER);//創(chuàng)建深陷型按鈕bt2.setText("SWT.PUSH");bt2.setBounds(90,10,75,30);Buttoncheck1=newButton(shell,SWT.CHECK);//創(chuàng)建復(fù)選按鈕check1.setText("SWT.CHECK");check1.setBounds(10,50,75,30);Buttoncheck2=newButton(shell,SWT.|SWT.);//創(chuàng)建深陷型復(fù)選按鈕CHECKBORDERcheck2.setText("SWT.CHECK");check2.setBounds(90,50,75,30);Buttonradio1=newButton(shell,SWT.);//創(chuàng)建單選按鈕RADIOradio1.setText("SWT.RADIO");radio1.setBounds(10,90,75,30);Buttonradio2=newButton(shell,SWT.RADIO|SWT.BORDER);//創(chuàng)建深陷型單選按鈕radio2.setText("SWT.RADIO");radio2.setBounds(90,90,75,30);ButtonarrowLeft=newButton(shell,SWT.ARROW|SWT.LEFT);//創(chuàng)建箭頭按鈕(向左)arrowLeft.setBounds(10,130,75,20);ButtonarrowRight=newButton(shell,SWT.ARROW|SWT.RIGHT|SWT.BORDER);arrowRight.setBounds(90,130,75,20);shell.pack();//自動(dòng)調(diào)整主窗體的大小shell.open();//打開主窗體while(!shell.isDisposed()){//如果主窗體沒有關(guān)閉if(!display.readAndDispatch()){//如果display不忙display.sleep();//休眠}}display.dispose();//銷毀display}}運(yùn)行結(jié)果如圖 4.4所示。圖4.4按鈕 圖4.5標(biāo)簽標(biāo)簽組件標(biāo)簽(Label類)組件是SWT中最簡單的組件。Label類的構(gòu)造方法和Button類相似,參數(shù)的含義與相同,格式如下:Label(Compositeparent,intstyle)Label類的常用式樣有以下幾種:Label類常用的式樣如下:SWT.CENTER:文字居中。SWT.RIGHT:文字靠右。SWT.LEFT:文字靠左。SWT.NONE:默認(rèn)式樣。SWT.WRAP:自動(dòng)換行。SWT.BORDER:深陷型。SWT.SEPARATOR:分欄符,默認(rèn)為豎線分欄。SWT.HORIZONTAL :橫線分欄符。例4.3標(biāo)簽示例。packageedu.ch4;importimportimportpublicclassSample4_3{publicstaticvoidmain(String[]args){Displaydisplay=newDisplay();//創(chuàng)建一個(gè)display對(duì)象。Shellshell=newShell(display);//shell是程序的主窗體//shell.setLayout(null);//設(shè)置shell的布局方式shell.setText("標(biāo)簽示例");//設(shè)置主窗體的標(biāo)題Labellb1=newLabel(shell,SWT.|SWT.);//深陷型、文字右對(duì)齊BORDERRIGHTlb1.setBounds(10,10,70,30);lb1.setText("標(biāo)簽1");lb1.setFont(newFont(display,"黑體",14,SWT.BOLD));//設(shè)置文字的字體字號(hào)lb1.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_BLUE));Labellb2=newLabel(shell,SWT.);//文字居中的標(biāo)簽CENTERlb2.setBounds(90,10,70,30);lb2.setText("標(biāo)簽2");lb2.setFont(newFont(display,"宋體",14,SWT.NORMAL));//設(shè)置文字的字體字號(hào)Labellb3=newLabel(shell,SWT.SEPARATOR|SWT.BORDER);//豎直分欄符lb3.setBounds(10,50,70,30);Labellb4=newLabel(shell,SWT.SEPARATOR|SWT.HORIZONTAL|SWT.BORDER);//水平分欄符lb4.setBounds(90,50,70,30);shell.pack();//自動(dòng)調(diào)整主窗體的大小shell.open();//打開主窗體while(!shell.isDisposed()){//如果主窗體沒有關(guān)閉則一直循環(huán)if(!display.readAndDispatch()){//如果display不忙display.sleep();//休眠}}display.dispose();//銷毀display}}程序運(yùn)行結(jié)果如圖 4.5所示。文本框組件文本框(Text類)的式樣如下:SWT.NONE:默認(rèn)式樣。SWT.CENTER:文字居中。SWT.LEFT:文字靠左。SWT.RIGHT:文字靠右。SWT.MULTI:可以輸入多行,須回車換行。SWT.WRAP:可以輸入多行,到行尾后自動(dòng)換行。SWT.PASSWORD:密碼型,輸入字符顯示成“

*”。SWT.BORDER:深陷型。SWT.V_SCROLL:帶垂直滾動(dòng)條。SWT.H_SCROLL:帶水平滾動(dòng)條。例

4.4

各種文本框示例。packageedu.ch4;importimportpublic class Sample4_4{public static void main(String[]args){Displaydisplay= newDisplay(); //創(chuàng)建一個(gè)display 對(duì)象。Shellshell= newShell(display); //shell 是程序的主窗體shell.setText( "文本框示例 ");Texttext1= newText(shell,SWT. NONE|SWT.BORDER);// 帶邊框text1.setBounds(10,10,70,30);Texttext2= newText(shell,SWT. PASSWORD);text2.setBounds(90,10,70,30);Texttext3= newText(shell,SWT. MULTI|SWT.V_SCROLL|SWT.H_SCROLL);text3.setBounds(10,50,70,70);Texttext4= newText(shell,SWT. WRAP|SWT.V_SCROLL);text4.setBounds(90,50,70,70);shell.pack();shell.open();while(!shell.isDisposed()){ //如果主窗體沒有關(guān)閉則一直循環(huán)if(!display.readAndDispatch()){ //如果display 不忙display.sleep(); //休眠}}display.dispose();

//銷毀display}}運(yùn)行結(jié)果如圖圖4.6

4.6所示。文本框

4.7

下拉框下拉框組件1.下拉框(Combo類)的式樣SWT.NONE:默認(rèn)式樣。SWT.READ_ONLY:只讀。SWT.SIMPLE:無須單擊下拉框,列表會(huì)一直顯示。2.下拉框(Combo類)的常用方法add(Stringstring):在Combo中增加一項(xiàng)。add(Stringstring,intindex):在Combo的第index項(xiàng)后插入一項(xiàng)。deselectAll():使Combo組件中的當(dāng)前選擇項(xiàng)置空。removeAll()

:將

Combo

中的所有選項(xiàng)清空。setItems(String[]items):將數(shù)組中的各項(xiàng)依次加入到 Combo中。select(intindex):將Combo的第index+1項(xiàng)設(shè)置為當(dāng)前選擇項(xiàng)。例

4.5

下拉框示例。packageedu.ch4;importimportimportpublic class Sample4_5{private static Label lb;public static void main(String[]args){Displaydisplay= newDisplay(); //創(chuàng)建一個(gè)display 對(duì)象。final Shellshell= newShell(display); //shell 是程序的主窗體shell.setText( "下拉框示例 ");final Combocombo=newCombo(shell,SWT. NONE);combo.setBounds(10,10,100,25);lb

=newLabel(shell,SWT.

WRAP);

//

創(chuàng)建標(biāo)簽,可自動(dòng)換行l(wèi)b

.setBounds(120,10,100,35);Buttonbt1=

newButton(shell,SWT.

NONE);bt1.setBounds(20,60,100,25);bt1.setText( "設(shè)值");bt1.addSelectionListener( newSelectionAdapter(){public voidwidgetSelected(SelectionEvente){//combo.removeAll(); // 清空combofor(int i=1;i<=3;i++){combo.add("第"+i+"項(xiàng)");// 循環(huán)添加選項(xiàng)

按鈕的單擊事件}combo.select(0);

//

設(shè)置默認(rèn)選項(xiàng)}});Buttonbt2= newButton(shell,SWT. NONE);bt2.setBounds(130,60,100,25);bt2.setText( "取值");bt2.addSelectionListener( newSelectionAdapter(){public voidwidgetSelected(SelectionEvente){// 按鈕的單擊事件lb

.setText(

"你選擇的是:

"+combo.getText());}});shell.pack();shell.open();while(!shell.isDisposed()){

//如果主窗體沒有關(guān)閉則一直循環(huán)if(!display.readAndDispatch()){

//如果display

不忙display.sleep();

//休眠}}display.dispose();

//銷毀display}}運(yùn)行結(jié)果如圖4.7所示。本例中,按鈕bt1和bt2添加了按鈕選擇監(jiān)聽事件代碼。下拉框最初沒有值,單擊【設(shè)置】按鈕后將一組數(shù)據(jù)加入,單擊【取值】按鈕,標(biāo)簽lb顯示取值的結(jié)果。列表框組件列表框(List類)組件的用法和下拉框( Combo類)相似。1.列表框(List類)的式樣SWT.NONE:默認(rèn)式樣。SWT.V_SCROLL:帶垂直滾動(dòng)條。SWT.MULTI:允許復(fù)選。SWT.SINGLE:允許單選。2.常用方法列表框(List類)組件的方法和下拉框 (Combo類)是一樣的,但由于List可選擇多項(xiàng),而Combo只能選擇一項(xiàng),所以 List沒有g(shù)etText()方法,List的取值是用組成的String數(shù)組。例4.6列表框示例。

getSelection()方法,返回一個(gè)所有選項(xiàng)packageedu.ch4;importimportimportimportimportimportimportimportpublic class Sample4_6{private static Label lb;public static void main(String[]args){Displaydisplay= newDisplay(); //創(chuàng)建一個(gè)display 對(duì)象。final Shellshell= newShell(display); //shell 是程序的主窗體shell.setText(

"列表框示例

");final

Listlist=

newList(shell,SWT.

MULTI|SWT.V_SCROLL|SWT.BORDER);聲明一個(gè)可復(fù)選、帶垂直滾動(dòng)條、有邊框的列表框。list.setBounds(10,10,100,50);lb

=newLabel(shell,SWT.

WRAP);lb

.setBounds(120,10,90,50);Buttonbt1=

newButton(shell,SWT.

NONE);bt1.setBounds(20,60,100,25);bt1.setText( "設(shè)值");bt1.addSelectionListener( newSelectionAdapter(){public voidwidgetSelected(SelectionEvente){list.removeAll();for(int i=1;i<=8;i++){list.add( "第"+i+"項(xiàng)"); // 將選項(xiàng)循環(huán)加入到列表框中}list.select(0);}});Buttonbt2= newButton(shell,SWT.bt2.setBounds(130,60,100,25);

NONE);bt2.setText( "取值");bt2.addSelectionListener( newSelectionAdapter(){public voidwidgetSelected(SelectionEvente){String[]selected=list.getSelection();//

聲明字符串?dāng)?shù)組保存選項(xiàng)StringoutStr= "" ;for(int j=0;j<selected. length;j++){outStr=outStr+ ""+selected[j];//

將數(shù)組中的選項(xiàng)加入到輸出字符串}lb.setText( "你選擇的是: "+outStr);}});shell.pack();shell.open();while(!shell.isDisposed()){

//如果主窗體沒有關(guān)閉則一直循環(huán)if(!display.readAndDispatch()){

//如果display

不忙display.sleep();

//休眠}}display.dispose();

//銷毀display}}本例開始運(yùn)行時(shí),列表框是空的,單擊【設(shè)置】按鈕,將選項(xiàng)加入到列表框中,按【

Ctrl

】鍵加鼠標(biāo)左鍵選項(xiàng),再按【取值】按鈕。運(yùn)行結(jié)果如圖 4.8所示。圖

4.8

列表框菜單菜單(Menu類,MenuItem類)是常用的SWT組件,Menu是一個(gè)菜單欄,同時(shí)也是一個(gè)容器,可以容納菜單項(xiàng)(MenuItem)。1.Menu的式樣SWT.BAR:菜單欄,用于主菜單。SWT.DROP_DOWN:下拉菜單,用于子菜單。SWT.POP_UP:鼠標(biāo)右鍵彈出式菜單。2.MenuItem的式樣SWT.CASCADE:有子菜單的菜單項(xiàng)。SWT.CHECK:選中后前面顯示一個(gè)小勾。SWT.PUSH:普通型菜單。SWT.RADIO:選中后前面顯示一個(gè)圓點(diǎn)。SWT.SEPARATOR:分隔符。3.建立菜單的一般步驟:①首先建立一個(gè)菜單欄,需要使用 SWT.BAR屬性。MenumainMenu=newMenu(shell,SWT. BAR);②在窗體中指定需要顯示的菜單欄。shell.setMenuBar(mainMenu);③創(chuàng)建頂級(jí)菜單項(xiàng),需要使用 SWT.CASCADE 屬性。MenuItemfileItem=

newMenuItem(mainMenu,SWT.

CASCADE);fileItem.setText(

"文件

&F");④創(chuàng)建與頂級(jí)菜單項(xiàng)相關(guān)的下拉式菜單。MenufileMenu= newMenu(shell,SWT.

DROP_DOWN);⑤將頂級(jí)菜單項(xiàng)與下拉菜單關(guān)聯(lián)。fileItem.setMenu(fileMenu);二級(jí)菜單的創(chuàng)建只需重復(fù)以上步驟 ③~⑤。注意:本例創(chuàng)建所有 Menu對(duì)象的第一個(gè)參數(shù)都是 shell;創(chuàng)建MenuItem對(duì)象的第一個(gè)參數(shù)是該 MenuItem所在的Menu對(duì)象;如果某 Menu是某MenuItem的子菜單,則還要建立關(guān)聯(lián): MenuItem.setMenu(Menu)。源代碼如下:packageedu.ch4;importimportimportimportimportpublic class Sample4_7{public static void main(String[]args){Displaydisplay= newDisplay(); //創(chuàng)建一個(gè)display 對(duì)象。final Shellshell= newShell(display); //shell 是程序的主窗體shell.setText( "菜單示例");MenumainMenu=newMenu(shell,SWT. BAR);shell.setMenuBar(mainMenu);//MenumainMenu=newMenu(shell,SWT.POP_UP);// 創(chuàng)建彈出式菜單//shell.setMenu(mainMenu); // 創(chuàng)建彈出式菜單{//"

文件"項(xiàng)MenuItemfileItem=

newMenuItem(mainMenu,SWT.

CASCADE);fileItem.setText(

"文件

&F");//" 文件"菜單MenufileMenu= newMenu(shell,SWT. DROP_DOWN);fileItem.setMenu(fileMenu);{//"

新建"項(xiàng)MenuItemnewFileItem=

newMenuItem(fileMenu,SWT.

CASCADE);newFileItem.setText(

"新建&N");//" 新建"菜單MenunewFileMenu=newMenu(shell,SWT. DROP_DOWN);newFileItem.setMenu(newFileMenu);{//"新建項(xiàng)目"項(xiàng)MenuItemnewProjectItem=

newMenuItem(newFileMenu,SWT.

PUSH);newProjectItem.setText(

"項(xiàng)目

\tCtrl+Shift+N"

);//

設(shè)置快捷鍵newProjectItem.setAccelerator(SWT.

CTRL+SWTSHIFT.+'N'

);//

添加事件監(jiān)聽newProjectItem.addSelectionListener( newSelectionAdapter(){public voidwidgetSelected(SelectionEvente){Texttext= newText(shell,SWT. MULTI|SWT.BORDER|SWT.WRAP);text.setBounds(10,10,100,30);text.setText(

"你選擇了“新建項(xiàng)目”

");}});newMenuItem(newFileMenu,SWT.

SEPARATOR);newMenuItem(newFileMenu,SWT.

PUSH).setText(

"包");newMenuItem(newFileMenu,SWT.

PUSH).setText(

"類");}MenuItemopenFileItem= newMenuItem(fileMenu,SWT. CASCADE);openFileItem.setText( "打開&O");MenuItemexitItem= newMenuItem(fileMenu,SWT. CASCADE);exitItem.setText( "退出&E");}MenuItemhelpItem=helpItem.setText(

newMenuItem(mainMenu,SWT."幫助&H");

CASCADE);}shell.pack();shell.open();while(!shell.isDisposed()){

//如果主窗體沒有關(guān)閉則一直循環(huán)if(!display.readAndDispatch()){

//如果display

不忙display.sleep();

//休眠}}display.dispose();

//銷毀display}}程序運(yùn)行結(jié)果如圖 4.9、4.10所示。當(dāng)點(diǎn)擊【文件】→【新建】→【項(xiàng)目

Ctrl+Shift+N

】時(shí),文本框中顯示“你選擇了‘新建項(xiàng)目’ ”。圖4.9選擇菜單圖4.10運(yùn)行結(jié)果創(chuàng)建彈出式菜單只需將①、②兩步的代碼改為以下兩行即可。MenumainMenu=newMenu(shell,SWT.POP_UP);//

創(chuàng)建彈出式菜單shell.setMenu(mainMenu); //

創(chuàng)建彈出式菜單4.3容器類通常,組件構(gòu)建在容器類中,容器構(gòu)建在主窗體(shell)中,主窗體也是容器,也就是說,容器不僅可以容納組件,也可以容納容器。有了容器,就可以通過它來對(duì)組件進(jìn)行集體操作。例如,容器在界面上移動(dòng)時(shí),其上的組件也會(huì)隨著容器移動(dòng),容器隱藏,其組件也會(huì)被隱藏,容器銷毀(dispose),其組件也會(huì)被銷毀。面板面板(Composite

類)是最常用的容器。主窗體(

shell)是面板(

Composite)的子類。面板的構(gòu)造方法格式如下:Composite(Compositeparent,intstyle)第一個(gè)參數(shù)表示該容器創(chuàng)建在哪個(gè)容器上,第二個(gè)參數(shù)表示容器的式樣。 Composite的式樣一般都是用SWT.NONE,這時(shí)Composite在界面是不顯示出來的,只是發(fā)揮著容器的作用。如果要讓容器形成凹陷效果,可以用SWT.BORDER式樣。例如,在主窗體中創(chuàng)建一個(gè)容器:Compositecomposite=newComposite(shell,SWT.NONE);Composite的常用方法:getLayout():得到布局管理器。getLayoutData():得到布局?jǐn)?shù)據(jù)。getParent():得到容納該容器的父容器。getShell():得到容納該容器的 Shell。layout():將容器上的組件重新布局,相當(dāng)于刷新。例4.8面板示例。packageedu.ch4;importimportimportimportimportpublic

class Sample4_8{public

static

void main(String[]args){Displaydisplay= newDisplay(); //創(chuàng)建一個(gè)display 對(duì)象。final Shellshell= newShell(display); //shell 是程序的主窗體shell.setText( "容器示例");Compositecomposite1= newComposite(shell,SWT. NONE);composite1.setBounds(10,10,100,50);Compositecomposite2= newComposite(shell,SWT. BORDER);composite2.setBounds(120,10,100,50);Labellb1= newLabel(composite1,SWT. NONE);lb1.setText( "面板1");lb1.pack();Labellb2= newLabel(composite2,SWT. NONE);lb2.setText( "面板2");lb2.pack();shell.pack();shell.open();while(!shell.isDisposed()){ //如果主窗體沒有關(guān)閉則一直循環(huán)if(!display.readAndDispatch()){ //如果display 不忙display.sleep(); //休眠}}display.dispose();

//銷毀display}}運(yùn)行結(jié)果如圖 4.11所示。圖4.11面板 圖4.12分組框分組框分組框(Group類)是面板(Composite類)的子類,所以兩者用法基本相同。主要區(qū)別是Group顯示有一個(gè)方框,且方框線上還可以顯示說明文字。例4.9分組框示例。packageedu.ch4;importimport *;public class Sample4_9{public static void main(String[]args){Displaydisplay= newDisplay(); //創(chuàng)建一個(gè)display 對(duì)象。final Shellshell= newShell(display); //shell 是程序的主窗體shell.setText( "分組框示例 ");Groupgroup1=newGroup(shell,SWT. NONE); //創(chuàng)建分組框group1.setText( "錄入信息"); // 設(shè)置分組框說明信息group1.setBounds(10,20,200,100);Labellb1= newLabel(group1,SWT. NONE);// 在分組框中加入組件lb1.setText( "姓名:");lb1.setBounds(10,20,70,20);Texttext1=newText(group1,SWT.BORDER);text1.setBounds(90,20,70,20);Labellb2=newLabel(group1,SWT.NONE);lb2.setText("地址:");lb2.setBounds(10,50,70,20);Texttext2=newText(group1,SWT.BORDER);text2.setBounds(90,50,70,20);shell.pack();shell.open();while(!shell.isDisposed()){//如果主窗體沒有關(guān)閉則一直循環(huán)if(!display.readAndDispatch()){//如果display不忙display.sleep();//休眠}}display.dispose();//銷毀display}}運(yùn)行結(jié)果如圖 4.12所示。選項(xiàng)卡選項(xiàng)卡包括一個(gè)選項(xiàng)卡(TabFolder類)和一個(gè)選項(xiàng)頁(TabItem類),TabFolder是容器,可以容納其他容器和組件,但TabItem不是容器,可以把它看成是一個(gè)選項(xiàng)標(biāo)簽,TabFolder通過TabItem來對(duì)其中的組件進(jìn)行控制。每一個(gè)TabItem用setControl()方法來控制一個(gè)界面組件。例4.10

選項(xiàng)卡示例。packageedu.ch4;importimportpublic class Sample4_10{public static void main(String[]args){Displaydisplay= newDisplay(); //創(chuàng)建一個(gè)display 對(duì)象。final Shellshell= newShell(display); //shell 是程序的主窗體shell.setText( "選項(xiàng)卡示例 ");TabFoldertabFolder= newTabFolder(shell,SWT. NONE);// 聲明一個(gè)選項(xiàng)卡容器tabFolder.setBounds(5,5,180,130);// 設(shè)置選項(xiàng)卡的位置和大小TabItemtabItem1= newTabItem(tabFolder,SWT. NONE);// 聲明第1個(gè)選項(xiàng)頁tabItem1.setText( "選項(xiàng)1"); // 設(shè)置選項(xiàng)頁的標(biāo)題{創(chuàng)建第1個(gè)分組框,建立在tabFolder上Groupgroup1=newGroup(tabFolder,SWT. NONE);group1.setText(

"錄入信息

");

//設(shè)置分組框說明信息tabItem1.setControl(group1);

//

讓tabItem1

控制group1Labellb1=

newLabel(group1,SWT.

NONE);

//注意Label

建立在

group1上lb1.setText( "姓名:");lb1.setBounds(10,20,70,20);Texttext1= newText(group1,SWT.text1.setBounds(90,20,70,20);Labellb2= newLabel(group1,SWT.lb2.setText( "地址:");lb2.setBounds(10,50,70,20);Texttext2= newText(group1,SWT.text2.setBounds(90,50,70,20);

BORDER);NONE);BORDER);}TabItemtabItem2=

newTabItem(tabFolder,SWT.

NONE);//

聲明第

2個(gè)選項(xiàng)頁tabItem2.setText(

"選項(xiàng)

2");{創(chuàng)建第2個(gè)分組框,建立在tabFolder上Groupgroup2=newGroup(tabFolder,SWT. NONE);tabItem2.setControl(group2);

//

讓tabItem2

控制group2group2.setText(

"興趣愛好

");Buttonbt1=

newButton(group2,SWT.

CHECK);bt1.setBounds(20,20,70,20);bt1.setText(

"音樂");Buttonbt2=

newButton(group2,SWT.

CHECK);bt2.setBounds(20,50,70,20);bt2.setText( "美術(shù)");Buttonbt3= newButton(group2,SWT. CHECK);bt3.setBounds(20,80,70,20);bt3.setText( "體育");}shell.pack();shell.open();while(!shell.isDisposed()){ //如果主窗體沒有關(guān)閉則一直循環(huán)if(!display.readAndDispatch()){ //如果display 不忙display.sleep(); //休眠}}display.dispose();

//銷毀display}}運(yùn)行結(jié)果如圖 4.13、4.14所示。圖4.13選項(xiàng)1 圖4.14選項(xiàng)24.4布局管理器在Java中, GUI程序開發(fā)的目標(biāo)之一是跨平臺(tái),而每種類型操作系統(tǒng)對(duì)屏幕的定義不一樣,所以 Swing中引入了布局的概念,對(duì)子組件的位置和大小等信息進(jìn)行定義。 SWT中也采用了布局方式,用戶可使用布局來控制組件中元素的位置和大小等信息。組件可以用方法 setBounds(intx,inty,intwidth,intheight) 來指定該組件相對(duì)于父組件的位置和組件的大小。組件的這種定位方式稱為絕對(duì)定位。當(dāng)組件數(shù)量較多,布局較復(fù)雜時(shí),則要使用布局管理器LayoutManager來進(jìn)行定位,這時(shí),每個(gè)控件的坐標(biāo) X、Y、寬度和高度都是通過 LayoutManager設(shè)置的,這種定位方式稱為托管定位。 SWT提供了一些常用的布局管理器供用戶使用;在本章中,將介紹四種基本的布局管理器:FillLayout、RowLayout、GridLayout和FormLayout。在布局管理器中,每當(dāng)重新設(shè)置復(fù)合組件的大小,都需要進(jìn)行定位。布局管理器常常是專為某一個(gè)復(fù)合組件設(shè)計(jì)的。一些布局管理器只使用它們自身的參數(shù)就可以控制,而另一些布局管理器還需要其它參數(shù)(LayoutData),該參數(shù)是在設(shè)置布局管理器的復(fù)合組件中的每個(gè)控件上指定的。SWT中常用的布局管理器有如下一些:FillLayout :充滿式布局,在容器中以相同的大小以單行或單列排列組件。RowLayout :行列式布局,以單行或多行的方式定制組件的排列方式。GridLayout:網(wǎng)格式布局,以網(wǎng)格的方式進(jìn)行布局,組件可以占用指定的一個(gè)或幾個(gè)網(wǎng)格。FormLayout:表格式布局,通過定義組件四個(gè)邊的距離來排列組件,被引用的相對(duì)的組件可以是父組件,也可以是同一容器中的其它組件。充滿式布局充滿式布局(FillLayout 類)是最簡單的布局管理器。它把組件按一行或一列充滿整個(gè)容器,并強(qiáng)制組件的大小一致。一般,組件的高度與最高組件相同,寬度與最寬組件相同。 FillLayout行,不能設(shè)置邊界距離和間距。如果容器中只有一個(gè)組件,則該組件會(huì)充滿整個(gè)容器。

不能折1.構(gòu)造方法:FillLayout() 創(chuàng)建按一行充滿容器的對(duì)象。FillLayout(inttype) 創(chuàng)建按指定類型充滿容器的對(duì)象,

指定類型(type)有:SWT.HORIZONTAL按一行充滿容器。SWT.VERTICAL

按一列充滿容器。2.常用屬性:inttype 指定組件充滿容器的類型。要將組件按一列充滿容器,可以設(shè)置

type的取值同上。type屬性,代碼如下:FillLayoutfilllayout= newFillLayout();// 創(chuàng)建FillLayoutFilllayout.type=SWT.VERTICAL; // 設(shè)置type的值shell.setLayout(filllayout);// 將FillLayout 對(duì)象用于shellnewButton(shell,SWT. PUSH).setText( "超寬按鈕1");// 在shellnewButton(shell,SWT. PUSH).setText( "按鈕2");newButton(shell,SWT. PUSH).setText( "按鈕3");newButton(shell,SWT. PUSH).setText( "按鈕4");

對(duì)象上中創(chuàng)建按鈕例4.11充滿式布局示例。packageedu.ch4;importimportimportpublic class Sample4_11{public static void main(String[]args){Displaydisplay= newDisplay();

//創(chuàng)建一個(gè)

display

對(duì)象。finalShellshell=newShell(display);//shell是程序的主窗體shell.setText("FillLayout示例");FillLayoutfilllayout=newFillLayout();//創(chuàng)建FillLayout對(duì)象shell.setLayout(filllayout);//將FillLayout對(duì)象用于shell上newButton(shell,SWT.PUSH).setText("超寬按鈕1");//在shell中創(chuàng)建按鈕newButton(shell,SWT.).setText("按鈕2");PUSHnewButton(shell,SWT.PUSH).setText("按鈕3");newButton(shell,SWT.).setText("按鈕4");PUSHshell.pack();shell.open();while(!shell.isDisposed()){//如果主窗體沒有關(guān)閉則一直循環(huán)if(!display.readAndDispatch()){//如果display不忙display.sleep();//休眠}}display.dispose();//銷毀display}}運(yùn)行結(jié)果如圖

4.15所示。圖4.15FillLayout水平布局圖4.16FillLayout如果要將按鈕按豎直方向排列,也可以只修改以下一行語句:

垂直布局Layoutlayout=

newFillLayout(SWT.VERTICAL);運(yùn)行結(jié)果如圖

4.16所示。行列式布局行列式布局(RowLayout類)可以使組件折行顯示,可以設(shè)置邊界距離和間距。另外,還可以對(duì)每個(gè)組件通過

setLayoutData()方法設(shè)置 RowData對(duì)象。RowData用來設(shè)置組件的大小。1.構(gòu)造方法:RowLayout() 創(chuàng)建按行放置組件的對(duì)象。RowLayout(inttype) 創(chuàng)建按指定類型放置組件的對(duì)象。指定類型(SWT.VERTICAL 按列放置組件。SWT.HORIZONTAL 按行放置組件。

type)有:2.常用屬性:intmarginWidth:組件距容器邊緣的寬度(像素) ,默認(rèn)值為 0。intmarginHeight:組件距容器邊緣的高度(像素) ,默認(rèn)值為 0。intmarginTop:組件距容器上邊緣的距離(像素) ,默認(rèn)值為 3。intmarginBottom:組件距容器下邊緣的距離(像素) ,默認(rèn)值為 3。intspacing:組件之間的距離,默認(rèn)值為 3。booleanjustify:如果該屬性為 true,則組件間的距離隨容器的拉伸而變大。默認(rèn)值為

false。booleanwrap:如果該屬性為動(dòng)折行。默認(rèn)值為 true。

true,則當(dāng)容器空間不足時(shí)會(huì)自動(dòng)折行;如果該屬性為

false,不自booleanpack:如果該屬性為相同。默認(rèn)值為 true。

true,組件大小為設(shè)定值;如果該屬性為

false,則強(qiáng)制組件的大小inttype:使組件按指定式樣放置,(type=SWT.HORIZONTAL|SWT.VERTICAL),默認(rèn)為按行放置,默認(rèn)值為SWT.HORIZONTAL。3.RowData類:RowData稱為RowLayout的布局?jǐn)?shù)據(jù)類,可用于改變?nèi)萜髦薪M件的外觀形狀。其構(gòu)造方法:RowData(intwidth,intheight);例如:Buttonbt1=

newButton(shell,SWT.

PUSH);

//創(chuàng)建按鈕bt1.setText(

"按鈕1");RowDatarowdata=newRowData(60,30);//

創(chuàng)建布局?jǐn)?shù)據(jù)類的對(duì)象bt1.setLayoutData(rowdata);

//

設(shè)置按鈕的布局?jǐn)?shù)據(jù)利用RowData對(duì)象設(shè)置按鈕(例4.12行列式布局。

bt1)的寬度是

60像素,高度是

30像素。packageedu.ch4;importimportimportpublicclassSample4_12{publicstaticvoidmain(String[]args){Displaydisplay=newDisplay();//創(chuàng)建一個(gè)display對(duì)象。finalShellshell=newShell(display);//shell是程序的主窗體shell.setText("FillLayout示例");RowLayoutrowlayout=newRowLayout();//創(chuàng)建按行放置組件的對(duì)象rowlayout.pack=false;//強(qiáng)制組件大小相同rowlayout.wrap=false;//不自動(dòng)折行rowlayout.marginWidth=20;//組件距容器邊緣的寬度為20像素rowlayout.marginHeight=20;//組件距容器邊緣的高度為20像素rowlayout.spacing=10;//組件之間的間距為10像素shell.setLayout(rowlayout);//設(shè)置容器shell的布局方式為rowlayoutButtonbt1=newButton(shell,SWT.PUSH);//創(chuàng)建按鈕bt1.setText("按鈕1");RowDatarowdata=newRowData(80,30);//創(chuàng)建布局?jǐn)?shù)據(jù)類的對(duì)象bt1.setLayoutData(rowdata);//設(shè)置按鈕的布局?jǐn)?shù)據(jù)newButton(shell,SWT.).setText("按鈕2");PUSHnewButton(shell,SWT.PUSH).setText("按鈕3");newButton(shell,SWT.PUSH).setText("按鈕4");shell.pack();//自動(dòng)調(diào)整容器shell的大小shell.open();//打開主窗體while(!shell.isDisposed()){//如果主窗體沒有關(guān)閉則一直循環(huán)if(!display.readAndDispatch()){//如果display不忙display.sleep();//休眠}}display.dispose();//銷毀display}}當(dāng)rowlayout.pack=true時(shí),各按鈕為設(shè)定值,如圖 4.17所示;當(dāng) rowlayout.pack=false時(shí),各按鈕被強(qiáng)制設(shè)定為相同大小,如圖 4.18所示;當(dāng) rowlayout.justify=true 時(shí),將主窗體拉伸,各按鈕間的距離也增大,但間隔均勻分布,如圖 4.19所示;當(dāng)rowlayout.justify=false 時(shí),將主窗體拉伸,各按鈕間距不變,如圖4.20所示;當(dāng)rowlayout.wrap=false 時(shí),當(dāng)主窗體寬度收縮, 按鈕自動(dòng)折行,如圖4.21所示;當(dāng) rowlayout.wrap=false時(shí),主窗體寬度收縮,按鈕不會(huì)折行,如圖 4.22所示。圖4.17 rowlayout.pack=true圖4.19rowlayout.justify=true

4.18rowlayout.pack=false圖4.20rowlayout.justify=false圖

4.21rowlayout.wrap=true

4.22rowlayout.wrap=false網(wǎng)格式布局網(wǎng)格式布局(GridLayout類)是實(shí)用而且功能強(qiáng)大的標(biāo)準(zhǔn)布局,也是較為復(fù)雜的一種布局。這種布局把容器分成網(wǎng)格,把組件放置在網(wǎng)格中。 GridLayout有很多可配置的屬性,和

RowLayout

一樣,也有專用的布局?jǐn)?shù)據(jù)類 GridData,GridLayout的強(qiáng)大之處在于它可以通過 GridData來設(shè)置每一個(gè)組件的外觀形狀。 GridLayout 的構(gòu)造方法無參數(shù),但可以通過 GfidData和設(shè)置 GridLayout的屬性來設(shè)置組件的排列及組件的形狀和位置。1.GridLayout的屬性intnumColumns:設(shè)置容器的列數(shù),組件從左到右按列放置,當(dāng)組件數(shù)大于列數(shù)時(shí),下一個(gè)組件將自動(dòng)添加新的一行。默認(rèn)值為1列。booleanmakeColumnsEqualWidth:強(qiáng)制使列都具有相同的寬度,默認(rèn)值為marginWidth:設(shè)置組件與容器邊緣的水平距離,默認(rèn)值為5。intmarginHeight:設(shè)置組件與容器邊緣的垂直距離,默認(rèn)值為5。inthorizontalSpacing:設(shè)置列與列之間的間隔,默認(rèn)值為5。intverticalSpacing:設(shè)置行與行之間的間隔,默認(rèn)值為 5。例4.13GridLayout的屬性設(shè)置。packageedu.ch4;importimportimportpublic class Sample4_13{public static void main(String[]args){Displaydisplay= newDisplay();Shellshell= newShell(display);shell.setText( "GridLayout 示例");GridLayoutgridLayout= newGridLayout();gridLayout. numColumns=3;gridLayout. horizontalSpacing =30;gridLayout. makeColumnsEqualWidth=true;shell.setLayout(gridLayout);newButton(shell,SWT.PUSH).setText("B1");newButton(shell,SWT.PUSH).setText("超寬按鈕2");newButton(shell,SWT.).setText("按鈕3");PUSHnewButton(shell,SWT.PUSH).setText("B4");newButton(shell,SWT.).setText("按鈕5");PUSHshell.pack();shell.open();while (!shell.isDisposed()){if (!display.readAndDispatch())display.sleep();}display.dispose();}}當(dāng)gridLayout.numColumns 分別為1、2、3時(shí),按鈕依次按 1列、2列和3列排列,運(yùn)行結(jié)果如圖4.23~4.25所示;當(dāng) makeColumnsEqualWidth=true時(shí),雖然按鈕寬度不同,但列寬相同,如圖所示;當(dāng) horizontalSpacing=30時(shí),列間距為 30,如圖4.27所示。

4.26圖

4.23numColumns=1

4.24numColumns=2

4.25numColumns=3圖

4.26makeColumnsEqualWidth=true

4.27horizontalSpacing=302.布局?jǐn)?shù)據(jù)類( GridData類)GridData 是GridLayout 專用的布局?jǐn)?shù)據(jù)類,用 GridDataGridData的構(gòu)造方法如下:GridData(); 創(chuàng)建一個(gè)屬性值為默認(rèn)值的對(duì)象。GridData(inttype); 創(chuàng)建一個(gè)指定類型( type)的對(duì)象。

可以構(gòu)建很多復(fù)雜的布局方式。①GridData常用類型如下:GridData.FILL通常與GridData類的對(duì)象屬性horizontalAlignment和verticalAlignment配合使用,充滿對(duì)象屬性指定的空間。GridData.FILL_HORIZONTAL 水平充滿,組件充滿網(wǎng)格水平方向的空間。GridData.FILL_VERTICAL 垂直充滿,組件充滿網(wǎng)格垂直方向的空間。GridData.FILL_BOTH 雙向充滿,組件充滿水平和垂直方向的空間。GridData.HORIZONTAL_ALIGN_BEGINNING 水平對(duì)齊靠左,組件在網(wǎng)格中靠左放置。GridData.HORIZONTAL_ALIGN_CENTER 水平對(duì)齊居中,組件在網(wǎng)格中居中放置。GridData.HORIZONTAL_ALIGN_END 水平對(duì)齊靠右,組件在網(wǎng)格中靠右放置。③GridData常用對(duì)象屬性如下:inthorizontalSpan設(shè)置組件占用的列數(shù),默認(rèn)值為1。intverticalSpan設(shè)置組件占用的行數(shù),默認(rèn)值為1。horizontalAlignment設(shè)置組件的對(duì)齊方式為水平方向。verticalAlignment設(shè)置組件的對(duì)齊方式為垂直方向。grabExcessHorizontalSpace搶占額外的水平空間。grabExcessVerticalSpace搶占額外的垂直空間。horizontalAlignment和verticalAlignment可以取以下值:BEGINNING開始(水平對(duì)齊時(shí)居左;垂直對(duì)齊時(shí)居上)CENTER 居中END 結(jié)束(水平對(duì)齊時(shí)居右;垂直對(duì)齊時(shí)居下)FILL 充滿默認(rèn)的horizontalAlignment 值是BEGINNING。默認(rèn)的 verticalAlignment 值是CENTER。例4.14使用gridData布局。packageedu.ch4;importimportimportpublicclassSample4_14{publicstaticvoidmain(String[]args){Displaydisplay=newDisplay();Shellshell=newShell(display);shell.setText("GridData示例");GridLayoutgridLayout=newGridLayout();//創(chuàng)建網(wǎng)格布局對(duì)象gridLayout.numColumns=3;//設(shè)置網(wǎng)格布局列數(shù)為3gridLayout.makeColumnsEqualWidth=true;//強(qiáng)制列寬相等shell.setLayout(gridLayout);//將shell設(shè)置為指定的網(wǎng)格布局式樣GridDatagridData=newGridData();//創(chuàng)建網(wǎng)格布局?jǐn)?shù)據(jù)對(duì)象gridData.horizontalSpan=2;//水平方向跨2列g(shù)ridData.verticalSpan=2;//垂直方向跨2行g(shù)ridData.horizontalAlignment=GridData.;//水平方向居中CENTERgridData.verticalAlignment=GridData.FILL;//垂直方向充滿Buttonb1=newButton(shell,SWT.PUSH);//創(chuàng)建按鈕對(duì)象b1b1.setText("B1");b1.setLayoutData(gridData);//將設(shè)定的網(wǎng)格布局?jǐn)?shù)據(jù)用于按鈕對(duì)象b1newButton(shell,SWT.).setText("超寬按鈕2");PUSHnewButton(shell,SWT.PUSH).setText("按鈕3");Buttonb4=newButton(shell,SWT.PUSH);b4.setText("B4");//用帶參數(shù)的構(gòu)造方法創(chuàng)建gridData對(duì)象gridData=newGridData(GridData.);FILL_HORIZONTALb4.setLayoutData(gridData);//將gridD

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論