![Java程序設(shè)計(jì)之swt教程_第1頁(yè)](http://file4.renrendoc.com/view/032e510c8a8094e79dab52532651f6c7/032e510c8a8094e79dab52532651f6c71.gif)
![Java程序設(shè)計(jì)之swt教程_第2頁(yè)](http://file4.renrendoc.com/view/032e510c8a8094e79dab52532651f6c7/032e510c8a8094e79dab52532651f6c72.gif)
![Java程序設(shè)計(jì)之swt教程_第3頁(yè)](http://file4.renrendoc.com/view/032e510c8a8094e79dab52532651f6c7/032e510c8a8094e79dab52532651f6c73.gif)
![Java程序設(shè)計(jì)之swt教程_第4頁(yè)](http://file4.renrendoc.com/view/032e510c8a8094e79dab52532651f6c7/032e510c8a8094e79dab52532651f6c74.gif)
![Java程序設(shè)計(jì)之swt教程_第5頁(yè)](http://file4.renrendoc.com/view/032e510c8a8094e79dab52532651f6c7/032e510c8a8094e79dab52532651f6c75.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第4章SWT圖形用戶界面本章要點(diǎn)SWT程序開發(fā)步驟。SWT常用組件的使用。SWT的布局。SWT的事件處理。SWTDesigner簡(jiǎn)介。本章難點(diǎn)SWT常用組件的使用。SWT的布局。SWT的事件處理。4.1SWT/JFace簡(jiǎn)介SWT(StandardWidgetToolkit)即標(biāo)準(zhǔn)小窗口工具箱,是IBM公司推出的一種在Eclipse中使用的集成開發(fā)環(huán)境,SWT提供可移植的API,并與底層本機(jī)OSGUI平臺(tái)緊密集成,它是一個(gè)與本地窗口系統(tǒng)集成在一起的小部件集和圖形庫(kù)。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)大的圖形包,它簡(jiǎn)化了常見的圖形用戶界面的編程任務(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)系4.1.1SWT程序開發(fā)步驟在eclipse的plugins目錄下,找到文件,文件名中中3.2.1是eclipse的版本號(hào),v3235是SWT的序列號(hào),不同的eclipse版本這兩個(gè)數(shù)字也不同。在DOS狀態(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的原生庫(kù)文件。原生庫(kù)文件為SWT通過JNI訪問windows本地API提供了接口,為使Java程序在啟動(dòng)時(shí)能夠訪問這些文件,可以通過以下方法進(jìn)行設(shè)置:方法一:將這四個(gè)DLL文件復(fù)制到j(luò)re的bin目錄下。方法二:設(shè)置環(huán)境變量,在PATH中加入這幾個(gè)dll文件所在的目錄。方法三:在eclipse的Java項(xiàng)目中導(dǎo)入原生庫(kù)文件。操作方法是:在eclipse的包資源管理器中,右單擊項(xiàng)目名→導(dǎo)入→常規(guī)→文件系統(tǒng)→下一步→瀏覽→選擇DLL文件所在目錄→確定→勾選DLL文件→完成。導(dǎo)入SWT的原生庫(kù)文件后,還要在eclipse的Java項(xiàng)目中配置構(gòu)建路徑,添加外部JAR,將文件加入到項(xiàng)目中,操作方法是:在eclipse的包資源管理器中,右單擊項(xiàng)目名→構(gòu)建路徑→配置構(gòu)建路徑→庫(kù)(L)→添加外部JAR→在eclipse的plugins文件夾中找到該jar文件→打開→確定。例4.1在Java應(yīng)用程序中使用SWT的組件。操作步驟:=1\*GB3①新建一個(gè)Java項(xiàng)目,項(xiàng)目名為:sample4_1。=2\*GB3②采用方法三在項(xiàng)目中導(dǎo)入原生庫(kù)文件。=3\*GB3③配置構(gòu)建路徑,將加入到項(xiàng)目中。eclipse包資源管理器可以看到導(dǎo)入的原生庫(kù)文件和引入的jar文件,如圖4.2所示。=4\*GB3④在項(xiàng)目中新建一個(gè)類,文件名為HelloSWT.java。=5\*GB3⑤在類文件中寫入代碼。圖4.2包資源管理器圖4.3程序運(yùn)行結(jié)果HelloSWT.java文件內(nèi)容如下:packageedu.ch4;importorg.eclipse.swt.SWT;importorg.eclipse.swt.widgets.Display;importorg.eclipse.swt.widgets.Text;importorg.eclipse.swt.widgets.Shell;importorg.eclipse.swt.graphics.*;classHelloSWT{ publicstaticvoidmain(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è)典型的SWT應(yīng)用程序需要以下步驟:=1\*GB3①創(chuàng)建一個(gè)Display=2\*GB3②創(chuàng)建一個(gè)或多個(gè)Shell=3\*GB3③設(shè)置Shell的布局=4\*GB3④創(chuàng)建Shell中的組件=5\*GB3⑤用open()方法打開Shell窗體=6\*GB3⑥寫一個(gè)事件轉(zhuǎn)發(fā)循環(huán)=7\*GB3⑦銷毀display4.1.2SWT中的包SWT是Eclipse圖形API的基礎(chǔ),本節(jié)簡(jiǎn)單介紹一下SWT中常用的包。1.dgets最常用的組件基本都在此包中,如Button、Text、Label、Combo等。其中兩個(gè)最重要的組件是Shell和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類)等。4.2.1按鈕組件按鈕(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:?jiǎn)芜x按鈕。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)位置和大?。▁軸坐標(biāo),y軸坐標(biāo),組件寬度width,組件高度height)。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)建路徑和引入原生庫(kù)。類Sample4_2.java源代碼如下:packageedu.ch4;importorg.eclipse.swt.*;importorg.eclipse.swt.widgets.*;publicclassSample4_2{ publicstaticvoidmain(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.CHECK|SWT.BORDER);//創(chuàng)建深陷型復(fù)選按鈕 check2.setText("SWT.CHECK"); check2.setBounds(90,50,75,30); Buttonradio1=newButton(shell,SWT.RADIO);//創(chuàng)建單選按鈕 radio1.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)簽4.2.2標(biāo)簽組件標(biāo)簽(Label類)組件是SWT中最簡(jiǎn)單的組件。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;importorg.eclipse.swt.*;importorg.eclipse.swt.widgets.*;importorg.eclipse.swt.graphics.Font;publicclassSample4_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.BORDER|SWT.RIGHT);//深陷型、文字右對(duì)齊 lb1.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.CENTER);//文字居中的標(biāo)簽 lb2.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所示。4.2.3文本框組件文本框(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;importorg.eclipse.swt.*;importorg.eclipse.swt.widgets.*;publicclassSample4_4{ publicstaticvoidmain(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下拉框4.2.4下拉框組件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;importorg.eclipse.swt.*;importorg.eclipse.swt.widgets.*;importorg.eclipse.swt.events.*;publicclassSample4_5{ privatestaticLabellb; publicstaticvoidmain(String[]args){ Displaydisplay=newDisplay();//創(chuàng)建一個(gè)display對(duì)象。 finalShellshell=newShell(display);//shell是程序的主窗體 shell.setText("下拉框示例"); finalCombocombo=newCombo(shell,SWT.NONE); combo.setBounds(10,10,100,25); lb=newLabel(shell,SWT.WRAP);//創(chuàng)建標(biāo)簽,可自動(dòng)換行 lb.setBounds(120,10,100,35); Buttonbt1=newButton(shell,SWT.NONE); bt1.setBounds(20,60,100,25); bt1.setText("設(shè)值"); bt1.addSelectionListener(newSelectionAdapter(){ publicvoidwidgetSelected(SelectionEvente){//按鈕的單擊事件 combo.removeAll();//清空combo for(inti=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(){ publicvoidwidgetSelected(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é)果。4.2.5列表框組件列表框(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的取值是用getSelection()方法,返回一個(gè)所有選項(xiàng)組成的String數(shù)組。例4.6列表框示例。packageedu.ch4;importorg.eclipse.swt.SWT;importorg.eclipse.swt.events.SelectionAdapter;importorg.eclipse.swt.events.SelectionEvent;importorg.eclipse.swt.widgets.Button;importorg.eclipse.swt.widgets.List;importorg.eclipse.swt.widgets.Display;importorg.eclipse.swt.widgets.Label;importorg.eclipse.swt.widgets.Shell;publicclassSample4_6{ privatestaticLabellb; publicstaticvoidmain(String[]args){ Displaydisplay=newDisplay();//創(chuàng)建一個(gè)display對(duì)象。 finalShellshell=newShell(display);//shell是程序的主窗體 shell.setText("列表框示例"); finalListlist=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(){ publicvoidwidgetSelected(SelectionEvente){ list.removeAll(); for(inti=1;i<=8;i++){ list.add("第"+i+"項(xiàng)");//將選項(xiàng)循環(huán)加入到列表框中 } list.select(0); } }); Buttonbt2=newButton(shell,SWT.NONE); bt2.setBounds(130,60,100,25); bt2.setText("取值"); bt2.addSelectionListener(newSelectionAdapter(){ publicvoidwidgetSelected(SelectionEvente){ String[]selected=list.getSelection();//聲明字符串?dāng)?shù)組保存選項(xiàng) StringoutStr=""; for(intj=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列表框 4.2.6菜單菜單(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.建立菜單的一般步驟:=1\*GB3①首先建立一個(gè)菜單欄,需要使用SWT.BAR屬性。MenumainMenu=newMenu(shell,SWT.BAR);=2\*GB3②在窗體中指定需要顯示的菜單欄。shell.setMenuBar(mainMenu);=3\*GB3③創(chuàng)建頂級(jí)菜單項(xiàng),需要使用SWT.CASCADE屬性。MenuItemfileItem=newMenuItem(mainMenu,SWT.CASCADE);fileItem.setText("文件&F");=4\*GB3④創(chuàng)建與頂級(jí)菜單項(xiàng)相關(guān)的下拉式菜單。MenufileMenu=newMenu(shell,SWT.DROP_DOWN);=5\*GB3⑤將頂級(jí)菜單項(xiàng)與下拉菜單關(guān)聯(lián)。fileItem.setMenu(fileMenu);二級(jí)菜單的創(chuàng)建只需重復(fù)以上步驟=3\*GB3③~=5\*GB3⑤。注意:本例創(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;importorg.eclipse.swt.widgets.*;importorg.eclipse.swt.widgets.Menu;importorg.eclipse.swt.widgets.MenuItem;importorg.eclipse.swt.events.*;importorg.eclipse.swt.*;publicclassSample4_7{ publicstaticvoidmain(String[]args){ Displaydisplay=newDisplay();//創(chuàng)建一個(gè)display對(duì)象。 finalShellshell=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+SWT.SHIFT+'N');//添加事件監(jiān)聽 newProjectItem.addSelectionListener(newSelectionAdapter(){ publicvoidwidgetSelected(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=newMenuItem(mainMenu,SWT.CASCADE); helpItem.setText("幫助&H"); } 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)建彈出式菜單只需將=1\*GB3①、=2\*GB3②兩步的代碼改為以下兩行即可。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ì)被銷毀。4.3.1面板面板(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;importorg.eclipse.swt.SWT;importorg.eclipse.swt.widgets.Display;importorg.eclipse.swt.widgets.Shell;importorg.eclipse.swt.widgets.Composite;importorg.eclipse.swt.widgets.Label;publicclassSample4_8{ publicstaticvoidmain(String[]args){ Displaydisplay=newDisplay();//創(chuàng)建一個(gè)display對(duì)象。 finalShellshell=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分組框4.3.2分組框分組框(Group類)是面板(Composite類)的子類,所以兩者用法基本相同。主要區(qū)別是Group顯示有一個(gè)方框,且方框線上還可以顯示說明文字。例4.9分組框示例。packageedu.ch4;importorg.eclipse.swt.SWT;importorg.eclipse.swt.widgets.*;publicclassSample4_9{ publicstaticvoidmain(String[]args){ Displaydisplay=newDisplay();//創(chuàng)建一個(gè)display對(duì)象。 finalShellshell=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所示。4.3.3選項(xiàng)卡選項(xiàng)卡包括一個(gè)選項(xiàng)卡(TabFolder類)和一個(gè)選項(xiàng)頁(yè)(TabItem類),TabFolder是容器,可以容納其他容器和組件,但TabItem不是容器,可以把它看成是一個(gè)選項(xiàng)標(biāo)簽,TabFolder通過TabItem來對(duì)其中的組件進(jìn)行控制。每一個(gè)TabItem用setControl()方法來控制一個(gè)界面組件。例4.10選項(xiàng)卡示例。packageedu.ch4;importorg.eclipse.swt.SWT;importorg.eclipse.swt.widgets.*;publicclassSample4_10{ publicstaticvoidmain(String[]args){ Displaydisplay=newDisplay();//創(chuàng)建一個(gè)display對(duì)象。 finalShellshell=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)頁(yè) tabItem1.setText("選項(xiàng)1");//設(shè)置選項(xiàng)頁(yè)的標(biāo)題 {//創(chuàng)建第1個(gè)分組框,建立在tabFolder上 Groupgroup1=newGroup(tabFolder,SWT.NONE); group1.setText("錄入信息");//設(shè)置分組框說明信息 tabItem1.setControl(group1);//讓tabItem1控制group1 Labellb1=newLabel(group1,SWT.NONE);//注意Label建立在group1上 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); } TabItemtabItem2=newTabItem(tabFolder,SWT.NONE);//聲明第2個(gè)選項(xiàng)頁(yè) tabItem2.setText("選項(xiàng)2"); {//創(chuàng)建第2個(gè)分組框,建立在tabFolder上 Groupgroup2=newGroup(tabFolder,SWT.NONE); tabItem2.setControl(group2);//讓tabItem2控制group2 group2.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ì)的組件可以是父組件,也可以是同一容器中的其它組件。4.4.1充滿式布局充滿式布局(FillLayout類)是最簡(jiǎn)單的布局管理器。它把組件按一行或一列充滿整個(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指定組件充滿容器的類型。type的取值同上。要將組件按一列充滿容器,可以設(shè)置type屬性,代碼如下:FillLayoutfilllayout=newFillLayout();//創(chuàng)建FillLayout對(duì)象Filllayout.type=SWT.VERTICAL;//設(shè)置type的值shell.setLayout(filllayout);//將FillLayout對(duì)象用于shell上newButton(shell,SWT.PUSH).setText("超寬按鈕1");//在shell中創(chuàng)建按鈕 newButton(shell,SWT.PUSH).setText("按鈕2"); newButton(shell,SWT.PUSH).setText("按鈕3"); newButton(shell,SWT.PUSH).setText("按鈕4");例4.11充滿式布局示例。packageedu.ch4;importorg.eclipse.swt.*;importorg.eclipse.swt.widgets.*;importorg.eclipse.swt.layout.*;publicclassSample4_11{ publicstaticvoidmain(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.PUSH).setText("按鈕2"); newButton(shell,SWT.PUSH).setText("按鈕3"); newButton(shell,SWT.PUSH).setText("按鈕4"); shell.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垂直布局如果要將按鈕按豎直方向排列,也可以只修改以下一行語(yǔ)句:Layoutlayout=newFillLayout(SWT.VERTICAL);運(yùn)行結(jié)果如圖4.16所示。4.4.2行列式布局行列式布局(RowLayout類)可以使組件折行顯示,可以設(shè)置邊界距離和間距。另外,還可以對(duì)每個(gè)組件通過setLayoutData()方法設(shè)置RowData對(duì)象。RowData用來設(shè)置組件的大小。1.構(gòu)造方法:RowLayout()創(chuàng)建按行放置組件的對(duì)象。RowLayout(inttype)創(chuàng)建按指定類型放置組件的對(duì)象。指定類型(type)有:SWT.VERTICAL按列放置組件。SWT.HORIZONTAL按行放置組件。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:如果該屬性為true,則當(dāng)容器空間不足時(shí)會(huì)自動(dòng)折行;如果該屬性為false,不自動(dòng)折行。默認(rèn)值為true。booleanpack:如果該屬性為true,組件大小為設(shè)定值;如果該屬性為false,則強(qiáng)制組件的大小相同。默認(rèn)值為type:使組件按指定式樣放置,(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è)置按鈕(bt1)的寬度是60像素,高度是30像素。例4.12行列式布局。packageedu.ch4;importorg.eclipse.swt.SWT;importorg.eclipse.swt.layout.*;importorg.eclipse.swt.widgets.*;publicclassSample4_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的布局方式為rowlayout Buttonbt1=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.PUSH).setText("按鈕2"); newButton(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.17rowlayout.pack=true圖4.18rowlayout.pack=false圖4.19rowlayout.justify=true圖4.20rowlayout.justify=false圖4.21rowlayout.wrap=true圖4.22rowlayout.wrap=false4.4.3網(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;importorg.eclipse.swt.*;importorg.eclipse.swt.widgets.*;importorg.eclipse.swt.layout.*;publicclassSample4_13{ publicstaticvoidmain(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.PUSH).setText("按鈕3"); newButton(shell,SWT.PUSH).setText("B4"); newButton(shell,SWT.PUSH).setText("按鈕5"); shell.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í),雖然按鈕寬度不同,但列寬相同,如圖4.26所示;當(dāng)horizontalSpacing=30時(shí),列間距為30,如圖4.27所示。圖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ù)類,用GridData可以構(gòu)建很多復(fù)雜的布局方式。=1\*GB3①GridData的構(gòu)造方法如下:GridData();創(chuàng)建一個(gè)屬性值為默認(rèn)值的對(duì)象。GridData(inttype
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度區(qū)塊鏈技術(shù)成果轉(zhuǎn)化與金融服務(wù)合同
- 2025年度文化創(chuàng)意產(chǎn)業(yè)股權(quán)轉(zhuǎn)讓合同正規(guī)范文本
- 2025年度綠色環(huán)保產(chǎn)品采購(gòu)合同標(biāo)準(zhǔn)范本
- 2025年度國(guó)際物流數(shù)據(jù)處理代理服務(wù)合同
- 2025年度居家護(hù)理服務(wù)護(hù)工合同
- 2025年度建筑工程造價(jià)信息化數(shù)據(jù)備份合同
- 2025年度合法借條范本:個(gè)人小額借款合同編制規(guī)范
- 2025年度精裝修工程勞務(wù)分包合同范本
- 2025年度智能能源管理系統(tǒng)合同范本
- 2025年度國(guó)內(nèi)水路貨物運(yùn)輸合同多式聯(lián)運(yùn)服務(wù)合同
- 《智能風(fēng)控實(shí)踐指南:從模型、特征到?jīng)Q策》記錄
- 新教材人教版高中物理選擇性必修第三冊(cè)全冊(cè)各章節(jié)知識(shí)點(diǎn)考點(diǎn)
- CJT 354-2010 城市軌道交通車輛空調(diào)、采暖及通風(fēng)裝置技術(shù)條件
- 2024年成都市中考數(shù)學(xué)試卷(含詳細(xì)解析)
- 暑假作業(yè) 11 高二英語(yǔ)語(yǔ)法填空20篇(原卷版)-【暑假分層作業(yè)】2024年高二英語(yǔ)暑假培優(yōu)練(人教版2019)
- 2023-2024學(xué)年浙江省溫州市七年級(jí)(上)期末英語(yǔ)試卷
- GMP附錄《無菌藥品》試卷測(cè)試題庫(kù)含答案
- JBT 7387-2014 工業(yè)過程控制系統(tǒng)用電動(dòng)控制閥
- 小學(xué)數(shù)學(xué)教學(xué)評(píng)一體化教學(xué)探究
- 2024年江西省南昌市南昌縣中考一模數(shù)學(xué)試題(含解析)
- 2024年保安員考試題庫(kù)【典型題】
評(píng)論
0/150
提交評(píng)論