版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于情景再現(xiàn)的博物館文物展示動(dòng)畫設(shè)計(jì)研究
- PDCoV核衣殼蛋白相分離的機(jī)制研究
- 二零二五年度快遞配送與代收貨款合作協(xié)議模板
- 加入價(jià)值鏈組織模式對(duì)農(nóng)戶借貸行為的影響研究
- 2025年度電子勞動(dòng)合同模板與員工離職手續(xù)簡化合同
- 2025年度改簽用人單位跨區(qū)域勞務(wù)派遣服務(wù)合同
- 渣土運(yùn)輸施工方案
- 2025年度歷史文化街區(qū)裝修合同解除及文化遺產(chǎn)保護(hù)協(xié)議
- 二零二五年度房地產(chǎn)開發(fā)項(xiàng)目評(píng)估合同
- 2025年度車庫租賃合同(含車位租賃與租賃期限最長5年)
- 2025-2030年中國陶瓷電容器行業(yè)運(yùn)營狀況與發(fā)展前景分析報(bào)告
- 二零二五年倉儲(chǔ)配送中心物業(yè)管理與優(yōu)化升級(jí)合同3篇
- 2025屆廈門高三1月質(zhì)檢期末聯(lián)考數(shù)學(xué)答案
- 音樂作品錄制許可
- 江蘇省無錫市2023-2024學(xué)年高三上學(xué)期期終教學(xué)質(zhì)量調(diào)研測(cè)試語文試題(解析版)
- 拉薩市2025屆高三第一次聯(lián)考(一模)英語試卷(含答案解析)
- 開題報(bào)告:AIGC背景下大學(xué)英語教學(xué)設(shè)計(jì)重構(gòu)研究
- 師德標(biāo)兵先進(jìn)事跡材料師德標(biāo)兵個(gè)人主要事跡
- 連鎖商務(wù)酒店述職報(bào)告
- 《實(shí)踐論》(原文)毛澤東
- 第三單元名著導(dǎo)讀《紅星照耀中國》(公開課一等獎(jiǎng)創(chuàng)新教學(xué)設(shè)計(jì)+說課稿)
評(píng)論
0/150
提交評(píng)論