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

下載本文檔

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

文檔簡(jiǎn)介

1、第4章SWT圖形用戶(hù)界面本章要點(diǎn)1. .SWT程序開(kāi)發(fā)步驟。2. SWT常用組件的使用。3. SWT勺布局。4. SWT的事件處理。5. SWTDesigner簡(jiǎn)介。本章難點(diǎn)1. SWT常用組件的使用。2. SWT的布局。3. SWT的事件處理。4.1SWT/JFace簡(jiǎn)介SWT(StandardWidgetToolkit)即標(biāo)準(zhǔn)小窗口工具箱,是IBM公司推出的一種在Eclipse中使用的集成開(kāi)發(fā)環(huán)境,SWT提供可移植的API,并與底層本機(jī)OSGUI平臺(tái)緊密集成,它是一個(gè)與本地窗口系統(tǒng)集成在一起的小部件集和圖形庫(kù)。SWT由JNI(JavaNativeInterface,Java本機(jī)接口)調(diào)用操

2、作系統(tǒng)的內(nèi)部API,因此運(yùn)行速度快,能夠獲得與操作系統(tǒng)的內(nèi)部應(yīng)用程序相同的外觀。JFace是一個(gè)用戶(hù)界面工具箱,也是一個(gè)易用、功能強(qiáng)大的圖形包,它簡(jiǎn)化了常見(jiàn)的圖形用戶(hù)界面的編程任務(wù)。SWT和JFace都是Eclipse平臺(tái)上的主要組件。JFace是在SWT的基礎(chǔ)上創(chuàng)建的,但JFace并不能完全覆蓋SWT的功能,JFace和SWT的關(guān)系如圖4.1所示。由于JFace的功能更強(qiáng)大,因此做圖形界面開(kāi)發(fā)時(shí)一般優(yōu)先選用JFace。圖4.1JFace和SWT的關(guān)系4.1.1SWT的序開(kāi)發(fā)步驟在eclipse的plugins目錄下,找到文件,文件名中中3.2.1是eclipse的版本號(hào),v3235是SWT的

3、序列號(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通過(guò)JNI訪問(wèn)windows本地API提供了接口,為使Java的序在啟動(dòng)時(shí)能夠訪問(wèn)這些文件,可以通過(guò)以下方法進(jìn)行設(shè)置:方法一:將這四個(gè)DLL文件復(fù)制到j(luò)re的bin目錄下。方法二:設(shè)置環(huán)境變量

4、,在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)-添加外部JAZ在eclipse的plugins文件夾中找到該jar文件-打開(kāi)確定。例4.1在Java應(yīng)用程序中使用SWT的組件。操作步驟: 新建一

5、個(gè)Java項(xiàng)目,項(xiàng)目名為:sample4_1。 采用方法三在項(xiàng)目中導(dǎo)入原生庫(kù)文件。 配置構(gòu)建路徑,將加入到項(xiàng)目中。eclipse包資源管理器可以看到導(dǎo)入白原生庫(kù)文件和引入的jar文件,如圖4.2所示。 在項(xiàng)目中新建一個(gè)類(lèi),文件名為HelloSWT.java。 在類(lèi)文件中寫(xiě)入代碼。圖4.2包資源管理器圖4.3程序運(yùn)行結(jié)果HelloSWT.java文件內(nèi)容如下:packageedu.ch4;importimportimportimportimportclassHelloSWTpublicstaticvoidmain(Stringargs)Display display= new Display()

6、;Shell shell= new Shell(display); shell.setLayout(null); /Text hello= newText(shell,SWT. shell.setText( Java 應(yīng)用程序 );shell.setSize(200,100);Color color= new Color(Display.shell.setBackground(color);/ 創(chuàng)建一個(gè) display 對(duì)象。/shell 是程序的主窗體設(shè)置 shell 的布局方式MULTI);/ 聲明一個(gè)可以顯示多行信息的文本框/ 設(shè)置主窗體的標(biāo)題/ 設(shè)置主窗體的大小getCurrent (

7、),255,255,255);/ 聲明顏色對(duì)象/ 設(shè)置窗體的背景顏色hello.setText( hello.pack(); /shell.pack(); / shell.open();Hello, SWT World!nn 你好,SW世界! ); /設(shè)置文本框信息/ 自動(dòng)調(diào)整文本框的大小自動(dòng)調(diào)整主窗體的大小/ 打開(kāi)主窗體while (!shell.isDisposed()if (!display.readAndDispatch()/ 如果主窗體沒(méi)有關(guān)閉則一直循環(huán)/ 如果 display 不忙/ 休眠/ 銷(xiāo)毀 displaydisplay.sleep();display.dispose();在

8、包資源管理器中,右單擊文件名HelloSWT.javaf運(yùn)行方式-Java應(yīng)用程序,程序運(yùn)行結(jié)果如圖4.3所示。該窗體具有典型的Windows風(fēng)格。分析本例的源代碼,可以看到,創(chuàng)建一個(gè)典型的SWT應(yīng)用程序需要以下步驟:創(chuàng)建一個(gè)Display創(chuàng)建一個(gè)或多個(gè)Shell設(shè)置Shell的布局創(chuàng)建Shell中的組件用open()方法打開(kāi)Shell窗體寫(xiě)一個(gè)事件轉(zhuǎn)發(fā)循環(huán)銷(xiāo)毀display4.1.2SWT中的包SWT是Eclipse圖形API的基礎(chǔ),本節(jié)簡(jiǎn)單介紹一下SWT中常用的包。1 dgets最常用的組件基本都在此包中,如Button、Text、Label、Combo等。其中兩個(gè)最重要的組件是Shell

9、和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。4SWT采用了和AWT/SWING一樣的事件模型,在包中可以找到事件監(jiān)聽(tīng)類(lèi)和相應(yīng)的事件對(duì)象。比如,鼠標(biāo)事件監(jiān)聽(tīng)器MouseListener,MouseMoveList

10、ener等,及對(duì)應(yīng)的事件對(duì)象MouseEvent。5此包中包含針對(duì)圖片、光標(biāo)、字體或繪圖API。比如,可通過(guò)Image類(lèi)調(diào)用系統(tǒng)中不同類(lèi)型的圖片文件。6對(duì)不同平臺(tái),SWT有一些針對(duì)性的API。例如,在Windows平臺(tái),可以通過(guò)此包很容易的調(diào)用OLE組件,這使得SWT程序也可以?xún)?nèi)嵌IE瀏覽器或Word、Excel等程序。4.2SWT/JFace常用組件SWT/JFace常用組件有按鈕(Button類(lèi))、標(biāo)簽(Label類(lèi))、文本框(Text類(lèi))、下拉框(Combo類(lèi))和列表框(List類(lèi))等。4.2.1 按鈕組件按鈕(Button)組件是SWT中最常用的組件,Button類(lèi)的構(gòu)造方法是:But

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

12、箭頭按鈕。SWT.NONE:默認(rèn)按鈕。SWT.CENTER:文字居中,與SWT.NONE相同。SWT.LEFT:文字靠左。SWT.RIGHT:文字靠右。SWT.BORDER:深陷型按鈕。SWT.FLAT:平面型按鈕。一個(gè)Button也可以指定多個(gè)式樣,只要將指定的各個(gè)式樣用符號(hào)“|”連接起來(lái)即可。如: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)簽文

13、字。setBounds(intx,inty,intwidth,intheight):設(shè)置組件的坐標(biāo)位置和大小(x軸坐標(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è)置是否選

14、中(僅對(duì)復(fù)選框或單選框有效)。true:選中,false:未選中(默認(rèn)值)。setToolTipText(Stringstring):設(shè)置鼠標(biāo)停留在組件上時(shí)出現(xiàn)的提示信息。以上方法在其他組件中也可使用。例4.2按鈕示例。按照例4.1的操作步驟建立項(xiàng)目、設(shè)置構(gòu)建路徑和引入原生庫(kù)。類(lèi)Sample4_2.java源代碼如下:packageedu.ch4;importimportpublicclassSample4_2publicstaticvoidmain(Stringargs)Displaydisplay=newDisplay();/創(chuàng)建一個(gè)display對(duì)象。Shellshell=newShel

15、l(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);/Button bt2=bt2.setText(newButton(shell,SWT.SWT.PUSH);設(shè)置按鈕顯示位置及寬度、高度PUS|SWT. BORDER/ 創(chuàng)建深陷型按鈕bt2.setBounds(90,1

16、0,75,30);Button check1 =check1.setText(new Button(shell,SWT.SWT.CHECK;CHECK/創(chuàng)建復(fù)選按鈕check1.setBounds(10,50,75,30);Button check2= new Button(shell,SWT.check2.setText( SWT.CHECK;check2.setBounds(90,50,75,30);CHECSWT.BORDER/創(chuàng)建深陷型復(fù)選按鈕Button radio1 =radio1.setText(new Button(shell,SWT.SWT.RADIO);RADIO/創(chuàng)建單選

17、按鈕RADIOSWT.BORDER/創(chuàng)建深陷型單選按鈕radio1.setBounds(10,90,75,30);Buttonradio2=newButton(shell,SWT.radio2.setText(SWT.RADIO);radio2.setBounds(90,90,75,30);ButtonarrowLeft=newButton(shell,SWT.ARRO|WWT.LEFT);/創(chuàng)建箭頭按鈕(向左)arrowLeft.setBounds(10,130,75,20);ButtonarrowRight=newButton(shell,SWT.ARRQWWT.RIGHTSWT.BORD

18、ERarrowRight.setBounds(90,130,75,20);shell.pack();shell.open();/自動(dòng)調(diào)整主窗體的大小/打開(kāi)主窗體while(!shell.isDisposed()if(!display.readAndDispatch()/如果主窗體沒(méi)有關(guān)閉/如果display不忙display.sleep();display.dispose();運(yùn)行結(jié)果如圖4.4所示。/休眠/銷(xiāo)毀display圖4.4按鈕圖4.5標(biāo)簽4.2.2標(biāo)簽組件標(biāo)簽(Label類(lèi))組件是SWT中最簡(jiǎn)單的組件。Label類(lèi)的構(gòu)造方法和Button類(lèi)相似,參數(shù)的含義與相同,格式如下:Labe

19、l(Compositeparent,intstyle)Label類(lèi)的常用式樣有以下幾種:Label類(lèi)常用的式樣如下: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_3publicstaticvoidmain(Stringargs)Displaydispla

20、y=newDisplay();Shellshell=newShell(display);/shell.setLayout(null);/shell.setText(標(biāo)簽示例);Labellb1=newLabel(shell,SWT./創(chuàng)建一個(gè)display對(duì)象。/shell是程序的主窗體設(shè)置shell的布局方式設(shè)置主窗體的標(biāo)題BORDE|SRWT.RIGHT);/深陷型、文字右對(duì)齊lb1.setBounds(10,10,70,30);lb1.setText(標(biāo)簽1);lb1.setFont(newFont(display,lb1.setForeground(Display.黑體,14,SWT.

21、BOLD);/設(shè)置文字的字體字號(hào)getCurrent().getSystemColor(SWT.COLOR_BL)U);ELabellb2=newLabel(shell,SWT.CENTE)R;/文字居中的標(biāo)簽SEPARATO|SRWT. HORIZONTA|SLWT. BORDE);Rlb2.setBounds(90,10,70,30);lb2.setText(標(biāo)簽2);lb2.setFont(newFont(display,Labellb3=newLabel(shell,SWT.lb3.setBounds(10,50,70,30);Labellb4=newLabel(shell,SWT./

22、水平分欄符宋體,14,SWT.NORMA)L;/設(shè)置文字的字體字號(hào)SEPARATO|SRWT.BORDE);R/豎直分欄符lb4.setBounds(90,50,70,30);shell.pack();/自動(dòng)調(diào)整主窗體的大小shell.open();/打開(kāi)主窗體while(!shell.isDisposed()/如果主窗體沒(méi)有關(guān)閉則一直循環(huán)if(!display.readAndDispatch()/如果display不忙display.sleep();/休眠display.dispose();/銷(xiāo)毀display程序運(yùn)行結(jié)果如圖4.5所示。4.2.3文本框組件文本框(Text類(lèi))的式樣如下:S

23、WT.NONE:默認(rèn)式樣。SWT.CENTER:文字居中。SWT.LEFT:文字靠左。SWT.RIGHT:文字靠右。SWT.MULTI:可以輸入多行,須回車(chē)換行。SWT.WRAP:可以輸入多行,到行尾后自動(dòng)換行。SWT.PASSWORD:密碼型,輸入字符顯示成“SWT.BORDER:深陷型。SWT.V_SCROLL:帶垂直滾動(dòng)條。SWT.H_SCROLL:帶水平滾動(dòng)條。例4.4各種文本框示例。packageedu.ch4;importimportpublicclassSample4_4publicstaticvoidmain(String口args)Displaydisplay=newDisp

24、lay。;Shellshell=shell.setText(newShell(display);”文本框示例);/創(chuàng)建一個(gè)display對(duì)象。/shell是程序的主窗體Texttext1=newText(shell,SWT.text1.setBounds(10,10,70,30);Texttext2=newText(shell,SWT.text2.setBounds(90,10,70,30);Texttext3=newText(shell,SWT.text3.setBounds(10,50,70,70);Texttext4=newText(shell,SWT.text4.setBounds(9

25、0,50,70,70);shell.pack();shell.open();while(!shell.isDisposed()if(!display.readAndDispatch()NONSWT.BORDER帶邊框PASSWORDMULTISWT.V_SCROI|SWT.H_SCROL_WRAPWT.V_SCROLL/如果主窗體沒(méi)有關(guān)閉則一直循環(huán)/如果display不忙display.sleep();/休眠/ 銷(xiāo)毀 display圖4.7下拉框display.dispose();運(yùn)行結(jié)果如圖4.6所示。圖4.6文本框4.2.4下拉框組件1 .下拉框(Combo類(lèi))的式樣SWT.NONE:默認(rèn)

26、式樣。SWT.READ_ONLY:只讀。SWT.SIMPLE:無(wú)須單擊下拉框,列表會(huì)一直顯示。2 .下拉框(Combo類(lèi))的常用方法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下拉框示例。pack

27、ageedu.ch4;importimportimportpublicclassSample4_5privatestaticLabellb;publicstaticvoidmain(String口args)Displaydisplay=newDisplay。;/創(chuàng)建一個(gè)display對(duì)象。finalShellshell=newShell(display);/shell是程序的主窗體shell.setText(下拉框示例);finalCombocombo=newCombo(shell,SWT.NONEcombo.setBounds(10,10,100,25);lb=newLabel(shell,

28、SWT.WRAP/創(chuàng)建標(biāo)簽,可自動(dòng)換行l(wèi)b.setBounds(120,10,100,35);Buttonbt1=newButton(shell,SWT.NONEbt1.setBounds(20,60,100,25);bt1.setText(設(shè)值);bt1.addSelectionListener(newSelectionAdapter()publicvoidwidgetSelected(SelectionEvente)/按鈕的單擊事件combo.removeAll();/清空combofor(inti=1;i=3;i+)combo.add(第+i+項(xiàng))/循環(huán)添加選項(xiàng)combo.select(

29、0);/設(shè)置默認(rèn)選項(xiàng));Buttonbt2=newButton(shell,SWT.NONEbt2.setBounds(130,60,100,25);bt2.setText(取值);bt2.addSelectionListener(newSelectionAdapter()publicvoidwidgetSelected(SelectionEvente)/按鈕的單擊事件lb.setText(你選擇的是:+combo.getText(););shell.pack();shell.open();while(!shell.isDisposed()/如果主窗體沒(méi)有關(guān)閉則一直循環(huán)if(!display.

30、readAndDispatch()/如果display不忙display.sleep();/休眠display.dispose();/銷(xiāo)毀display運(yùn)行結(jié)果如圖4.7所示。本例中,按鈕bt1和bt2添加了按鈕選擇監(jiān)聽(tīng)事件代碼。下拉框最初沒(méi)有值,單擊【設(shè)置】按鈕后將一組數(shù)據(jù)加入,單擊【取值】按鈕,標(biāo)簽lb顯示取值的結(jié)果。4.2.5 列表框組件列表框(List類(lèi))組件的用法和下拉框(Combo類(lèi))相似。1 .列表框(List類(lèi))的式樣SWT.NONE:默認(rèn)式樣。SWT.V_SCROLL:帶垂直滾動(dòng)條。SWT.MULTI:允許復(fù)選。SWT.SINGLE:允許單選。2.常用方法列表框(List類(lèi))

31、組件的方法和下拉框(Combo類(lèi))是一樣的,但由于List可選擇多項(xiàng),而Combo只能選擇一項(xiàng),所以List沒(méi)有g(shù)etText()方法,List的取值是用getSelection()方法,返回一個(gè)所有選項(xiàng)組成白肉String數(shù)組。例4.6列表框不例。packageedu.ch4;importimportimportimportimportimportimportimportpublicclassSample4_6privatestaticLabellb;publicstaticvoidmain(String口args)Displaydisplay=newDisplay。;/創(chuàng)建一個(gè)displa

32、y對(duì)象。finalShellshell=newShell(display);/shell是程序的主窗體shell.setText(列表框示例);finalListlist=newList(shell,SWT.MULT|SWT.V_SCROLLWT.BORDER/聲明一個(gè)可復(fù)選、帶垂直滾動(dòng)條、有邊框的列表框。list.setBounds(10,10,100,50);lb=newLabel(shell,SWT.WRAPlb.setBounds(120,10,90,50);Buttonbt1=newButton(shell,SWT.NONE);bt1.setBounds(20,60,100,25);

33、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)加入到列表框中l(wèi)ist.select(0););Buttonbt2=newButton(shell,SWT.NONE);bt2.setBounds(130,60,100,25);bt2.setText(取值);bt2.addSelectionListener(newSelecti

34、onAdapter()publicvoidwidgetSelected(SelectionEvente)Stringselected=list.getSelection();/聲明字符串?dāng)?shù)組保存選項(xiàng)StringoutStr=;for(intj=0;jselected.length;j+)outStr=outStr+selectedj;/將數(shù)組中的選項(xiàng)加入到輸出字符串lb.setText(你選擇的是:+outStr););shell.pack();shell.open();while(!shell.isDisposed()/如果主窗體沒(méi)有關(guān)閉則一直循環(huán)if(!display.readAndDis

35、patch()/如果display不忙display.sleep();/休眠display.dispose();/銷(xiāo)毀display本例開(kāi)始運(yùn)行時(shí),列表框是空的,單擊【設(shè)置】按鈕,將選項(xiàng)加入到列表框中,按【Ctrl】鍵加鼠標(biāo)左鍵選項(xiàng),再按【取值】按鈕。運(yùn)行結(jié)果如圖4.8所示。圖4.8列表框4.2.6 菜單菜單(Menu類(lèi),MenuItem類(lèi))是常用的SWT組件,Menu是一個(gè)菜單欄,同時(shí)也是一個(gè)容器,可以容納菜單項(xiàng)(MenuItem)。1. Menu的式樣SWT.BAR:菜單欄,用于主菜單。SWT.DROP_DOWN:下拉菜單,用于子菜單。SWT.POP_UP:鼠標(biāo)右鍵彈出式菜單。2. Men

36、uitem的式樣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.CASCADEfileI

37、tem.setText(文件&F);創(chuàng)建與頂級(jí)菜單項(xiàng)相關(guān)的下拉式菜單。MenufileMenu=newMenu(shell,SWT.DROP_DOWVN將頂級(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;importimportimportimportim

38、portpublicclassSample4_7publicstaticvoidmain(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)

39、;/創(chuàng)建彈出式菜單/文件項(xiàng)Menuitemfileitem=newMenuitem(mainMenu,SWT.CASCADEfileitem.setText(文件&F);/文彳牛菜單MenufileMenu=newMenu(shell,SWDROP_DOW/Nfileltem.setMenu(fileMenu);/新建項(xiàng)MenuitemnewFileItem=newMenuItem(fileMenu,SWT.CASCADEnewFileItem.setText(新建&N);/新建菜單MenunewFileMenu=newMenu(shell,SWT.DROP_DC)VVNnewFileitem

40、.setMenu(newFileMenu);/新建項(xiàng)目”項(xiàng)MenuitemnewProjectItem=newMenuItem(newFileMenu,SWT.PUSHnewProjectItem.setText(項(xiàng)目tCtrl+Shift+N);/設(shè)置快捷鍵newProjectItem.setAccelerator(SWT.CTR+SWTSHIFT+N);/添加事件監(jiān)聽(tīng)newProjectItem.addSelectionListener(newSelectionAdapter()publicvoidwidgetSelected(SelectionEvente)Texttext=newTex

41、t(shell,SWT.MULT|SWT.BCRDESWT.WRAPtext.setBounds(10,10,100,30);text.setText(你選擇了新建項(xiàng)目););newMenuItem(newFileMenu,SWT.SEPARATORnewMenuItem(newFileMenu,SWT.PUSHsetText(包);newMenuItem(newFileMenu,SWT.PUSHsetText(類(lèi));MenuitemopenFileItem=newMenuItem(fileMenu,SWT.CASCADEopenFileItem.setText(打開(kāi)&C);Menuiteme

42、xitItem=newMenuitem(fileMenu,SWT.CASCADEexitItem.setText(退出&E);Menuitemhelpitem=newMenuitem(mainMenu,SWT.CASCADEhelpitem.setText(幫助&H);shell.pack();shell.open();while(!shell.isDisposed()/如果主窗體沒(méi)有關(guān)閉則一直循環(huán)if(!display.readAndDispatch()/如果display不忙display.sleep();/休眠display.dispose();/銷(xiāo)毀displayCtrl+Shift+

43、N 】時(shí),文本程序運(yùn)行結(jié)果如圖4.9、4.10所示。當(dāng)點(diǎn)擊【文件】-【新建】-【項(xiàng)目框中顯示“你選擇了新建項(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容器類(lèi)通常,組件構(gòu)建在容器類(lèi)中,容器構(gòu)建在主窗體(shell)中,主窗體也是容器,也就是說(shuō),容器不僅可以容納組件,也可以容納容器。有了容器,就可以通過(guò)它來(lái)對(duì)組件進(jìn)行集體操作。例如,容器在界面上移動(dòng)時(shí),其上的組件也會(huì)隨著容器移動(dòng),容器隱藏,

44、其組件也會(huì)被隱藏,容器銷(xiāo)毀(dispose),其組件也會(huì)被銷(xiāo)毀。4.3.1 面板面板(Composite類(lèi))是最常用的容器。主窗體(shell)是面板(Composite)的子類(lèi)。面板的構(gòu)造方法格式如下:Composite(Compositeparent,intstyle)第一個(gè)參數(shù)表示該容器創(chuàng)建在哪個(gè)容器上,第二個(gè)參數(shù)表示容器的式樣。Composite的式樣一般都是用SWT.NONE,這時(shí)Composite在界面是不顯示出來(lái)的,只是發(fā)揮著容器的作用。如果要讓容器形成凹陷效果,可以用SWT.BORDER式樣。例如,在主窗體中創(chuàng)建一個(gè)容器:Compositecomposite=newCompos

45、ite(shell,SWT.NONE);Composite的常用方法:getLayout():得到布局管理器。getLayoutData():得到布局?jǐn)?shù)據(jù)。getParent():得到容納該容器的父容器。getShell():得到容納該容器的Shell。layout():將容器上的組件重新布局,相當(dāng)于刷新。例4.8面板示例。packageedu.ch4;importimportimportimportimportpublicclassSample4_8publicstaticvoidmain(Stringargs)Displaydisplay=newDisplay();/創(chuàng)建一個(gè)display

46、對(duì)象。finalShellshell=newShell(display);/shell是程序的主窗體shell.setText(容器示例);Compositecomposite1=newComposite(shell,SWT.NON)E;composite1.setBounds(10,10,100,50);Compositecomposite2=newComposite(shell,SWT.BORDE)R;composite2.setBounds(120,10,100,50);Label lb1=lb1.setText( lb1.pack(); Label lb2=new Label(comp

47、osite1,SWT. 面板 1 );NON)E;lb2.setText(new Label(composite2,SWT. 面板 2 );NON)E;lb2.pack();shell.pack();shell.open();while (!shell.isDisposed()if (!display.readAndDispatch()/ 如果主窗體沒(méi)有關(guān)閉則一直循環(huán)/ 如果 display 不忙display.sleep();display.dispose();/ 休眠/ 銷(xiāo)毀 display運(yùn)行結(jié)果如圖 4.11 所示。圖 4.11 面板4.12 分組框4.3.2 分組框分組框( Grou

48、p 類(lèi))是面板( Composite 類(lèi))的子類(lèi),所以?xún)烧哂梅ɑ鞠嗤V饕獏^(qū)別是 顯示有一個(gè)方框,且方框線上還可以顯示說(shuō)明文字。例 4.9 分組框示例。package edu.ch4;Groupimportimportpublic class Sample4_9 public static void main(String args) Display display= new Display(); / 創(chuàng)建一個(gè) display 對(duì)象。final Shell shell= newShell(display); /shell 是程序的主窗體shell.setText( 分組框示例 );Group

49、 group1= new Group(shell,SWT. group1.setText( 錄入信息 ); group1.setBounds(10,20,200,100);Label lb1= new Label(group1,SWT. lb1.setText( 姓名: ); lb1.setBounds(10,20,70,20);Text text1= new Text(group1,SWT. text1.setBounds(90,20,70,20);Label lb2= new Label(group1,SWT. lb2.setText( 地址: );lb2.setBounds(10,50,

50、70,20);NON)E;/NON)E; /BORDE);RNON)E;/ 創(chuàng)建分組框 設(shè)置分組框說(shuō)明信息在分組框中加入組件Text text2= new Text(group1,SWT.BORDE);Rtext2.setBounds(90,50,70,20); shell.pack();shell.open();while (!shell.isDisposed()/ 如果主窗體沒(méi)有關(guān)閉則一直循環(huán)if (!display.readAndDispatch()/ 如果 display 不忙display.sleep();display.dispose();/ 休眠/ 銷(xiāo)毀 display運(yùn)行結(jié)果如

51、圖 4.12 所示。4.3.3 選項(xiàng)卡選項(xiàng)卡包括一個(gè)選項(xiàng)卡(TabFolder類(lèi))和一個(gè)選項(xiàng)頁(yè)(Tabitem類(lèi)),TabFolder是容器,可以容納其他容器和組件,但 TabItem 不是容器,可以把它看成是一個(gè)選項(xiàng)標(biāo)簽,TabFolder 通過(guò) Tabitem 來(lái)對(duì)其中的組件進(jìn)行控制。每一個(gè) Tabitem用setControl()方法來(lái)控制一個(gè)界面組件。例 4.10 選項(xiàng)卡示例。package edu.ch4;importimportpublic class Sample4_10 public static void main(String args) Display display=

52、new Display(); / 創(chuàng)建一個(gè) display 對(duì)象。final Shell shell= newShell(display); /shell 是程序的主窗體shell.setText( 選項(xiàng)卡示例);TabFolder tabFolder=new TabFolder(shell,SWT.NON)E;/ 聲明一個(gè)選項(xiàng)卡容器tabFolder.setBounds(5,5,180,130); /設(shè)置選項(xiàng)卡的位置和大小Tabitem tabitem1=new Tabitem(tabFolder,SWT.NON)E;/ 聲明第 1個(gè)選項(xiàng)頁(yè)tabitem1.setText( 選項(xiàng) 1 );

53、/ 設(shè)置選項(xiàng)頁(yè)的標(biāo)題/創(chuàng)建第1個(gè)分組框,建立在tabFolder 上Group group1= new Group(tabFolder,SWT.NONE);group1.setText( 錄入信息 ); tabitem1.setControl(group1); / Label lb1= newLabel(group1,SWT. lb1.setText( 姓名: ); lb1.setBounds(10,20,70,20);Text text1= new Text(group1,SWT./ 設(shè)置分組框說(shuō)明信息讓 tabitem1 控制 group1NON)E;/ 注意 Label 建立在 group1 上BORDE);RNON)E;text1.setBounds(90,20,70,20);Labellb2=newLabel(group1,SWT.lb2.setText(地址:);lb2.setBounds(10,50,70,20);Texttext2=newText(group1,SWT.BORDE);Rtext2.setBounds(90,50,70,20);TabItemtabItem2=newTabItem(tabFolder,SWT.NON)E;/聲明第2個(gè)選項(xiàng)頁(yè)tabItem2.setText(選項(xiàng)2);/創(chuàng)建第2個(gè)分組框,建立在tabFolder上G

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論