神兵利器eclipse開發(fā)技術詳解_第1頁
神兵利器eclipse開發(fā)技術詳解_第2頁
神兵利器eclipse開發(fā)技術詳解_第3頁
神兵利器eclipse開發(fā)技術詳解_第4頁
神兵利器eclipse開發(fā)技術詳解_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、第 4 章SWT 組件本章講解 SWT 的基本概念和特性,讀者需要了解基本界面元素的特性,通過容器的概念掌握界面元工作。間的互相關系與組件的體系結構,并掌握用其進行程序開發(fā)需要準備的前期本章學習重點:了解 SWT 的基本概念掌握在 Eclipse 環(huán)境下如何開發(fā) SWT 程序熟悉常用的 SWT 組件熟悉常用的 SWT 容器綜合使用 SWT 進行桌面程序 GUI 的開發(fā)4.1SWT 簡介SWT(Standard Widget Toolkit)本身僅僅是 Sun 公司為了開發(fā) Eclipse IDE 環(huán)境所編寫的一組底層圖形界面 API。它是跨GUI(圖形用戶界面)開發(fā)工具包,無論是在性能上還是在

2、外觀上,都了之前的 AWT 和 Swing。AWT(Abstract Windowing Toolkit)是 Sun 公司開發(fā)的一個跨GUI 開發(fā)工具包。它一直未能突破 LCD 問題,所以之后 Sun 為了補救,又創(chuàng)建了一個新的框架 Swing。這個框架雖然提供了豐富的窗口部件集,并且使用仿真窗口部件(emulated widgets)解決了 LCD 問題,但也帶來了新的問題。例如,Swing 應用程序的界面外觀和原應用程序的外觀不再相似,導致以前使用的 Java 桌面程序與系統(tǒng)上的其他程序看起來格格不入,并且會消耗太多的內(nèi)存,不適于一些小設備,如PDA 和移動等。IBM 努力嘗試以徹底解決

3、AWT 和 Swing 框架帶來的上述問題,最終,創(chuàng)建了一個新的 GUI說 明LCD(Liquid Crystal Display),中文意思是液晶顯示器。第 4 章SWT 組件庫,這就是 SWT。這個框架通過 JNI(Java Nativeerface,它允許 Java 代碼和其他語言寫的代碼進行交互)來宿主操作系統(tǒng)中的資源。如果在宿主上無法找到一個窗口部件,框架就會自動地模擬它。4.1.1概述Eclipse 將 SWT 描述為一種“與本地窗口系統(tǒng)結合但與操作系統(tǒng)無關的 API 窗口小部件集及圖形庫”。目前隨著 Eclipse 的逐漸開發(fā),SWT 已經(jīng)十分穩(wěn)定。這里的穩(wěn)定首先是指性能上的穩(wěn)定

4、,只要操作系統(tǒng)提供了相應圖形的構件,那么 SWT 便會簡單應用 JNI 技術調(diào)用它們,只有那些操作系統(tǒng)中不提供的構件,才會進行模擬的實現(xiàn)??梢钥闯?SWT 性能上的穩(wěn)定性大多取決于相應操作系統(tǒng)圖形構件的穩(wěn)定性。其次穩(wěn)定是指 API 包中的類、方法的名稱和結構已經(jīng)少有改變,程序員不用擔心由于 Eclipse 組織開發(fā)進度很快,而導致自己的程序代碼變化過大。從一個版本更新至另一版本,通常只需簡單將包換掉就即可。SWT 在功能上與 AWT/SWING 十分類似,但是組件更為豐富,而且解決了許多穩(wěn)定性的問題。如果應用程序需要跨運行,而且需要保證性能與美觀,且不要依賴 AWT/SWING 的話,SWT

5、是一個非常好的選擇。4.1.2基本特性類“Widget”(窗口小部件)包括了 SWT 中的所有控件,其基類包括:“Control”(控制)、“”(菜單)、“ScrollBar”(滾動條)、“Item”(項)等,如圖 4-1 所示為“Widget”的類圖。ltemButtonLabelProgressBarScrollableltemTreeltemBrowserCoolBarGroupTableTree圖 4-1Widget 類圖“Widget”的子類“Control”是一個比較龐大的基類,大部分部件都在此類下,其直接子類有“Button”(按鈕)、“Label”(標記)、“ProgressB

6、ar”(進度條)等。“Control”的子類“Scrollable”是所有可以帶滾動條的對象的基類,比如“Text”(文本框)、“List”(列表框)等。“Scrollable”的子類“Comite”是 SWT 中一個重要的類,是所有可容納其他部件的類的基類,其子類有“Browser”(瀏覽器)、“Group”(組合框)、“Table”(表格)、“Tree”(樹)等。91ComiteTextListTableIterScrollBarControlWidget第 2 篇SWT 應用“Widget”的基類“Item”下是一些無法獨立于其他部件的部件,比如“項)、“TableItem”(表格項)、

7、“TreeItem”(樹項)等。Item”(菜單以上是 SWT 所含有的基本實體控件,但是在要想創(chuàng)建一個窗口,至少要用到兩個類:“Display”和“S”。“Display”類起管理者的作用,負責處理所有“Widget”和操作系統(tǒng)之間的交互,比如可以通過其內(nèi)部的方法來查詢操作系統(tǒng):哪個控件獲取了焦點,當前打開了哪些窗口,等等。“S口可以創(chuàng)建其他的”實例提供了真正可見的窗口。該窗口一般作為主窗口使用,如果主窗框,這時會產(chǎn)生不同的實例,這個新建的框應當作為主窗口實例的子對象。從這點可以知道,“S”實例可以直接從“Display”創(chuàng)建,也可以從父代創(chuàng)建。4.2SWT 程序在 Eclipse 編程環(huán)境

8、中編寫 SWT 程序首先需要引入相關的依賴包。方式已經(jīng)面介紹過了,軟件內(nèi)部自帶了 SWT 的 JAR 文件,同時也可以到獲得相關內(nèi)容。4.2.1加入 SWT 依賴包通過 Eclipse 新建一個 Java 工程之后,就可以通過配置工程的屬性來添加新的依賴目錄。一般配置的原理就是為當前工程配置一個新的 Classpath,這樣在以找到相應的名字空間了。(1)右擊項目頭部,選擇“Properties”菜單,如圖 4-2 所示。SWT 內(nèi)容的時候,就可(2)單擊 Properties 命令,彈出“Java Build Path”框,如圖 4-3 所示,單擊其中的“AddJARs ” 按鈕就可以進入瀏

9、覽器菜單。 通過瀏覽器去尋找 SWT 的 JAR包,名字是“.eclipse.swt.win32.win32.x86_3.2.0.v3232m.jar”。圖 4-2配置 SWT 工程圖 4-3Java Build Path(3)Eclipse 的界面程序是基于 JFace 寫成的,而 JFace 就是 SWT 的一個擴展。所以,要想92第 4 章SWT 組件找到 SWT 的 JAR 文件,就需要在 Eclipse 安裝目錄下的 plugins 文件夾下尋找。找到之后雙擊文件,就完成了加入 SWT 的依賴包的任務,效果如圖 4-4 所示。除了在 Eclipse 中尋找默認的安裝包以外,還有另一種

10、獲圖 4-4成功加入依賴得 SWT 工具包的方法,就是Eclipse 中的 SWT 的“首頁如圖 4-5 所示?!?,在這里可以找到最新發(fā)布信息,版本介紹以及源代碼等。圖 4-5SWT在上可以選擇SWT 的開發(fā)包以及源文件。Eclipse會根據(jù)機器的 IP選擇最近的鏡像來提供,如圖 4-6 所示。圖 4-6SWT前面的簡介中提到過,SWT 雖然是用 Java 實現(xiàn)的,但是并沒有脫離無關性,圖 4-7所示為 SWT 在不同操作系統(tǒng)中運行的效果。正是其依賴性才使得 SWT 的顯示效果要高于AWT 和 SWING。從圖中可以看到,對于不同的系統(tǒng),所展現(xiàn)出的界面效果的差異相當大。4.2.2 “o wor

11、ld”程序首先從最典型的“oWorld”程序開始逐漸講解 SWT 的程序結構,了解什么是“Display”和“S”對象。在工程“swt”中建立一個“oWorld”類。這里在類配置模板中勾選“生成 main 函數(shù)”復選框。在圖 4-8 中單擊“Finish”按鈕之后就可以進行程序的編寫了。93第 2 篇SWT 應用圖 4-7各種 SWT 頁面圖 4-8生成oWorld 類在oWorld 類中簡單地添加部分代碼,實現(xiàn)在一個框中顯示o World 并且輸出一個圖標。運行結果如圖 4-9 所示。以下是類中的代碼:圖 4-9o World94import.eclipse.swt.*;import.ecl

12、ipse.swt.custom.CLabel; import.eclipse.swt.widgets.*;public classoWorld public sic void main(String args) /程序主方法Display dipl = new Display ();/創(chuàng)建 Display 對象 diplSshl= new S(dipl);/創(chuàng)建前面 Display 對象的 S對象 shl shl.setText(SWT);shl.setImage(dipl.getSystemImage(SWT.ICON QUESTION); CLabel lbl = new CLabel (

13、shl,SWT.LEFT);/創(chuàng)建 Label 對象 lbl.setImage(dipl.getSystemImage(SWT.ICON INFORMATION); lbl.setText(o Worldn);/創(chuàng)建 Label 顯示的文字 lbl.pack();shl.pack();shl.open();while(!shl.isDised()/銷毀資源第 4 章SWT 組件下面逐行解釋代碼并介紹相關內(nèi)容。首先一個“Display”類,用于直接調(diào)用當前系統(tǒng)資源的對象,它封裝了部分相關的方法。但是只有“Display”對象是不能顯示出窗口的,還需要創(chuàng)建窗口對象“S”。它的概念和 Visual

14、C+中的“Window”以及和 VC#中的“Form”的概念類似。根據(jù)層次關系,“S”對象要在“Display”對象下面創(chuàng)建,一個“Display”可以被多個“S”調(diào)用。考慮到實際用”,并且指向同一個到的軟件出現(xiàn)的多窗口應用的情況,每個窗口都應當“Display”。為一個“SDi s p l a y d i p l = n ew Di s p l a y () ; ./ /創(chuàng)建D i s p l a y 對象 d i p l/ /創(chuàng)建前面D i s p l a y 對象的 SSs h l = n ew S( d i p l ) ;對象 s h l程序對于“S”的某些屬性進行了定義與修改。這里簡

15、單給窗口定義了一個標題“SWT”,之后又定義了一個圖標。前面“S”對象添加到“Display”中,之后應當做的是為其添加各種小窗口部件(Widget)。這種層級的對應關系也是一對多的。為了顯示“o World”,程序中使用了 Label 控件,并且是 Label 的升級控件,CLabel。一般的 Label 對象只可以顯示文字或者文本,而 CLabel 可以二者同時顯示。初始化控件的時候,必須要依托一個“S”對象。在初始化的構造函數(shù)的第二個參數(shù)“SWT.LEFT”表示這個控件中的內(nèi)容是采用左對齊的對齊方式。接下來繼續(xù)在控件中設置屬性。后面要做的工作就是顯示這個窗口了,在顯示之前需調(diào)整每個對象中

16、包含的元素的布局,可以使用 pack()方法。該方法的作用是,發(fā)送調(diào)整信息,調(diào)整所有的接收者的大小,回到各自的首選尺寸。所謂的接收者就是調(diào)用該方法的對象。該方法可以添加型參數(shù),如果參數(shù)為“true”,表示小窗口部件(Widget)會采用其正常的大小,而且會盡可能靠左對齊,如果參數(shù)為“false”,小窗口部件會填充可用的空間。一般會在 SWT 的布局函數(shù)中使用 pack()方法。95l b l . p ac k () ;s h l . p ac k () ;/ /調(diào)整布局s h l . op e n () ;/ /打開窗口l b l . s e t Ima g e ( d i p l . g e

17、 t Sy s t emIma g e ( SWT . ICON INFORMAT ION ) ;/ /設置 l a b e l 顯示的,使用系統(tǒng)默認的l b l . s e t Te x t ( o Wo r l d n ) ;/ /設置l a b e l 顯示的文字CLa b e l l b l = n ew CLa b e l ( s h l , SWT .LEFT ) ;/ /在 s h l 對象中初始化一個新的 l a b e l 控件s h l . s e t Te x t ( SWT );/ /為框設置標題s h l . s e t Ima g e ( d i p l . g e

18、 t Sy s t emIma g e ( SWT . ICON QUEST ION ) ;/ /為框設置圖標,這里采用的是系統(tǒng)默認圖標,是從 SWT 調(diào)用的系統(tǒng)默認資源中的,也可使用自定義圖標i f ( d i p l . r ea dAndDi s p a t c h () d i p l . s l ee p () ;d i p l . d i se () ;第 2 篇SWT 應用運行到這里,整個程序就算基本完成了,后面關閉窗口進行資源銷毀工作。代碼如下:Java 也使用類似 Windows 程序設計中消息循環(huán)的方法來處理事件。這段代碼的意義就是反復和分派(dispatch)事件,并在沒

19、有事件的時候把控制權還給 CPU。這里可以看到很清晰的 SWT 程序的編寫步驟:創(chuàng)建“Display”對象。描述“Display”對象。為“Display”添加“S描述“S”對象?!睂ο?。(5)為“S”對象添加各種“Widget”(窗口部件)。描述各個部件的屬性,協(xié)同關系以及和上層“S調(diào)整布局。顯示窗口?!钡年P系。4.2.3運行 SWT 應用當程序中了 SWT 包之后,選擇“Run As”“SWT Application”命令,如圖 4-10 所示。運行 SWT 的界面程序必須要選擇這個選項,否則會有出錯信息提示。圖 4-10運行 SWT 應用一般情況下,如果還是選擇運行 Java 程序選項的

20、話,會有如下的錯誤提示:導致該錯誤的原因是沒有為 Java 程序添加本地庫文件。如果將“.eclipse.swt.win32.win32.x86_3.2.0.v3232m.jar”文件解壓縮的話,會發(fā)現(xiàn)在“os/win32/x86”目錄下有幾個“dll”文件,這些是 SWT本地操作系統(tǒng)所需要的接口。運行 Java 程序的時候必須能夠到這些文件,程序才可以正常運行。具體有以下幾種解決方式:(1)最簡單的辦法就是直接把“.dll”文件到 JRE 的“bin”目錄下。96Exceptionhread main java.lang.UnsatisfiedLinkError: no swt-win32-

21、3232 in java.library.pathat java.lang.ClassLoader.loadLibrary(Unknown Source) at java.lang.Runtime.loadLibrary0(Unknown Source)at java.lang.System.loadLibrary(Unknown Source)at.eclipse.swt.ernal.Library.loadLibrary(Library.java:123) at.eclipse.swt.ernal.win32.OS.(OS.java:18)at.eclipse.swt.widgets.Di

22、splay.(Display.java:125)atoWorld.main(oWorld.java:8)while(!shl.isDised()if (dipl.readAndDispatch() dipl.sleep();dipl.dise();第 4 章SWT 組件(2)設定環(huán)境變量,在參數(shù)“PATH”中加入“dll”文件。(3)把“.eclipse.swt.win32.win32.x86_3.2.0.v3232m.jar”里面的“swt-win32- 3232.dll”解壓縮出來到“WINDOWSSYSTEM32”目錄中。以上 3 種方法都可以保證 SWT 程序能正常運行。4.3可視化

23、SWT 編程組件Java 從最初開始,即使是做 UI 程序也都是由程序員手寫的。一度“Edit Plus”+“Javac”的文本和命令行方式是 Java 程序員最常用的開發(fā)方式。軟件開發(fā)追求敏捷。如果有快速開發(fā)的方式,程序員不應當年的使用,人們已經(jīng)使用。Windows 下的可視化開發(fā)輔助環(huán)境做的比較成熟,而且由于多。相關的可視化用戶界面開發(fā)起步比較晚,而且成產(chǎn)品除了NetBeans 似乎沒有什么太流行的。本身 Java 界面相對做的就不是很成熟,再加上沒有更好的可視化編程環(huán)境,使得 Java 桌面程序處于落后地位。但是有了 SWT 與眾不同的實現(xiàn)方式,Java 程序編寫的界面實現(xiàn)了高效與美觀并

24、行。再加上有一款比較成可視化編程輔助工具,編寫界面程序已經(jīng)不再是難事了。本小節(jié)介紹兩款可以在 Eclipse 中使用的可視化編程插件,SWT Designer 和 Visual Editor。這兩款產(chǎn)品的使用都比較方便,而且和 Eclipse 結合比較穩(wěn)定,在實際編程過程中,使用這兩款產(chǎn)品的程序員越來越多。下面簡單講解這兩款產(chǎn)品的特性及安裝使用方式。4.3.1SWT DesignerSWT Designer 是一款十分簡潔的可視化編程插件。該軟件是一款的插件,在使用的時候必須是“或者。首先進入 SWT Designer 的主頁,如圖 4-11 所示,進行/”。,主頁地址圖 4-11SWT De

25、signer 首頁97第 2 篇SWT 應用在首頁中找到頁面,地址為“./swt-designer/download.html”,從中選擇適合本機操作系統(tǒng)的安裝包。如果為常用的 Windows 操作系統(tǒng)的話,應當?shù)谝恍械能浖?,單擊如圖 4-12 所示的“Full Installer for Windows”。圖 4-12頁面SWT Designer 除了本身的文件很大以外和一般的 Eclipse 插件沒有任何區(qū)別。安裝過程就是按照前面介紹的各種步驟進行。將的文件“D11esigner_v6.5.0_for_Eclipse3.2.zip”解壓縮之后放置到 Eclipse 中的“plugins”

26、文件夾下面。此外該軟件還提供了一個用于卸載的批處理文件“delete.bat”來進行軟件的刪除。正確安裝 SWT Designer 之后需要重新啟動 Eclipse。之后,新建一個工程便可以看到如圖 4-13 所示的項目選擇窗口多出了一個“Designer”項目,里面可以直接創(chuàng)建“SWT/JFace JavaProject”或者“Widget Paletle Plug-in”。除了從向導中建立界面程序之外,只要是使用了界面相關內(nèi)容的源程序文件,SWT Designer都可以進行識別,然后在程序窗口的左下角會出現(xiàn)源程序和設計頁面的一個切換。與一般可視化編程環(huán)境不同的是,SWT Designer

27、的設計和程序是分離的。圖 4-14 所示為使用 Swing 組件的例子。前面提到了 SWT Designer 是一個的軟件,如圖 4-15 所示,在其主頁上有明確的限制。信息。如果沒有辦法的話也可以選擇試用方式或者評估方式,只是功能上會受單擊圖 4-14 所示的“Design”之后就會觸發(fā) SWT Designer 程序,首先出現(xiàn)信息,效果如圖 4-16 所示,SWT Designer 希望用戶或者評估。從頁面中可以選擇或者免費試用。試用的話只能選擇 “SWT 可視化設計器”、“Swing 設計器”和“窗口”中的一種,并且還是部分功能進行試用。如果了 SWTDesigner 產(chǎn)品,用戶將會獲得

28、一個序列號,只要在框中輸入序列號和激活碼就可以使用該98第 4 章SWT 組件產(chǎn)品的全部功能了。下面演示如何試用版。圖 4-13SWT Designer 項目圖 4-14源文件視圖圖 4-15的 SWT Designer(1)在激活框中選擇試用方式之后會顯示“Next”按鈕,單擊“Next”按鈕進入如圖 4-17 所示的個人信息填寫界面,輸入個人信息。(2)單擊“Next”按鈕,頁面將會自動連接到 SWT Designer 的安裝頁面“進行,之后就可以試用了,如圖 4-18 所示。com”99第 2 篇SWT 應用圖 4-16激活頁面圖 4-17個人信息完成之后,前面提到的 Java 源文件就

29、可以用可視化的方式編輯了,效果如圖 4-19 所示。SWT Designer 的功能已經(jīng)比較全面了,但仍只能作為編程的一個輔助工具,畢竟它還有許多地方做得還不如微軟的產(chǎn)品使用起來方便。在 SWT Designer 中手工寫代碼還是很重要的,而且當界面組件增多的時候,SWT Designer 十分耗費資源,甚至可能會導致 Eclipse 內(nèi)存異常而退出。100第 4 章SWT 組件圖 4-18連接圖 4-19Design 頁面4.3.2Visual EditorVisual Editor 也是一款可視化的 GUI 開發(fā)工具,也是以插件的方式安裝到 Eclipse中去的,可以開發(fā) Swing/JF

30、C 和 SWT/RCP 桌面程序。Visual Editor 是附屬于 Eclipse 的開源項目,和 SWT Designer 不同的一點是,Visual Editor 是免費的。Visual Editor 需要兩個 Eclipse 組件來支持,安裝 Visual Editor 之前要EMF”和“GEF”組件。這些組件都可以在 Eclipse 的上找到。下面三個文件并且以插件方式安裝到 Eclipse 中,就可以使用 Visual Editor 了。101第 2 篇SWT 應用GEF-runtime-3.0.1.zipemf-sdo-runtime-2.0.1.zipVE-runtime-1

31、.1.0.1.zip確定 Visual Editor 正確安裝的方法是在 Java 工程的頭部右擊,單擊“添加”(new)菜單,如果出現(xiàn)“Visual Class”和“Example”兩個選項就表示已經(jīng)正確安裝了 Visual Editor。“Example”選項中是 Visual Editor 自帶的兩個工程,目的是作為指導開發(fā)的例子來使用,分別是一個瀏覽器和一個文本編輯器。Visual Editor 的開發(fā)環(huán)境和 SWT Designer 有一些不同,體現(xiàn)在按鈕的排布和分類上。但這些都不會影響使用。使用 Visual Editor 也需要新建 Java 工程,這點也和 SWT Design

32、er 不同。新建 Java 工程之后在添加新類的時候選擇 Visual Class 就可以使用可視化界面了,如圖 4-20所示。下面的工作是添加一個可視化類的配置窗口。一般創(chuàng)建窗口文件都需要選擇 SWT 中的S類型,然后輸入類的名字并且選擇“public sic void main (String arg)”來構造一個“main”方法。單擊圖 4-21 中的“Finish”按鈕就可以進行可視化編輯了。圖 4-20Visual Editor 編輯界面圖 4-21配置 Visual Class4.4基類 ControlSWT 的控件類結構不像一般的 GUI 類庫,沒有單一的父組件。常見的 Swin

33、g 和微軟的 MFC都有一個Item。的父類。SWT 中有幾個比較重要的父類,分別是、ite 和(1)Widget 是基本的 SWT GUI 組件類似于 Java AWT 中的 Component 和 Swing 中的JComponent。Widget 是一個抽象類,是圖形用戶接口的元素。102第 4 章SWT 組件(2)Control 擁有操作系統(tǒng)的對等物的窗口小部件(換句話說,在操作系統(tǒng)中具有同一是一個抽象類。),(3)Comite 包含其他控件的控件(類似于 Java AWT 中的 Container 和 Swing 中的 JPanel)屬于容器類。Comite 可以包含其他 Comit

34、e 和 Control 的容器。(4)Item 是其他控件包含的窗口小部件(該控件可能不是復合控件),比如列表和表。注意;包含一些項的控件很少包含其他控件,反之亦然。Item 也是一個抽象類。Item 類是一個輕量級的系統(tǒng)對象,總是作為基本的元素與其他一些類配合使用。比如 Tree 中的元素即為 TreeItem,Table 的元素則是 TableItem,的元素則是Item 了。4.4.1繼承關系SWT 的 Java 文檔內(nèi)嵌在 Eclipse SDK 幫助文檔中。只要在開發(fā)環(huán)境中選擇“Help”“Help Content”命令就可以在 API 中找到相關信息,如圖 4-22 所示。“Con

35、trol”類可以表示一般的用戶界面元素,是操作系統(tǒng)的標準控件。這些操作系統(tǒng)控件都被定義為這個類的子類。例如 Button、Text 都是其子類?!癈ontrol”繼承自 Drawable,其直接被繼承的子類有:Button、Label、Link、ProgressBar、Sash、Scrollable、Slider。4.4.2Control 類的常用方法“Control”類本身是抽象類,在 Eclipse API 中的相關文檔如圖 4-23 所示,在其中用戶可以事件、修改外觀、屬性和視圖等。圖 4-22SWT API圖 4-23Control 類“Control”類常用方法:addControl

36、Listener(ControlListener listener):給當前控件ControlListener器,當Control 對象被移動或者尺寸改變的時候把ControlListener 接口中定義的消息發(fā)給的器。103第 2 篇SWT 應用addFocusListener(FocusListener listener):給當前控件FocusListener器,當?shù)谋O(jiān)Control 對象失去或者獲得焦點的時候把 FocusListener 接口中定義的消息發(fā)給。addHelpListener(HelpListener listener):給當前控件HelpListener器,當 Cont

37、rol器。對象觸發(fā)幫助事件的時候把 HelpListener 接口中定義的消息發(fā)給的addKeyListener(KeyListener listener):給當前控件KeyListener器,當有鍵盤操作,比如按下或者松開的時候,把 KeyListener 接口中定義的消息發(fā)給的器。器,當addMouseListener(MouseListener listener):給當前控件MouseListener鼠標的按鈕有動作,比如按下或者松開的時候把 MouseListener 接口中定義的消息發(fā)給的器。addMouseMoveListener(MouseMoveListener listene

38、r): 給當前控件MouseMoveListener。器,當鼠標移動時把 MouseMoveListener 接口中定義的消息發(fā)給的監(jiān)addMouseTrackListener(MouseTrackListener listener): 給當前控件MouseTrackListener器,當鼠標經(jīng)過或者在某個控件上面移動的時候把 MouseTrackListener 接口中定義的消息發(fā)給的器。addPaListenaListener listener):給當前控件PaListener器,當事件器。接收者進行繪制的時候把 PaListener 接口中定義的消息發(fā)給的addTraverseListe

39、ner(TraverseListener listener):給當前控件當有經(jīng)過事件的時候把 TraverseListener 接口中定義的消息發(fā)給TraverseListener器,的器。computeSize(computeSize(wH,wH,hH):返回接收者的首選尺寸。hH,changed):返回接收者的首選尺寸(重載)。forceFocus():強制接收者獲得鍵盤輸入焦點,使得全部的鍵盤時間發(fā)送到當前的接收者那去。getAcsible():返回當前接收者可以使用的對象。getBackground():返回當前接收者的背景顏色。 getBackgroundImage():返回當前接收

40、者的背景getBorderWidth():返回當前接收者的邊際寬度。getBounds():返回一個矩形來描述接收者的尺寸和對于父類的相對位置。getEnabled():返回型表示當前接收者是否可以操作getFont():返回接收者用于處理文字信息的字體。 getForeground():返回接收者用于畫圖的前景顏色。 getLayoutData():返回接收者相關的布局信息。getLocation():返回接收者對于父類的相對位置。get():如果存在右鍵彈出菜單的話則返回菜單,否則返回 null。getMonitor():返回接收者的器。getParent():返回接收者的父類。getS(

41、):返回接收者的 S類。104第 4 章SWT 組件getSize():返回接收者的尺寸。getToolTipText():返回接收者的 getVisible():返回接收者是否可見。說明文字。ernal_dise_GC(hDC,ata data):喚起回收句柄?;厥站浔rnal_new_GC(ata data):喚起產(chǎn)生新的isEnabled():返回接收者是否可操作。 isFocusControl():返回接收者是否具有控制焦點。 isReparentable():返回接收者是否支持修改父類。 isVisible():返回接收者是否可見。moveAbove(Control contro

42、l):將接收者的繪圖順序上移到某個控件之上。moveBelow(Control control):將接收者的繪圖順序上移到某個控件之下。 pack():使接收者的尺寸變成預先設定的尺寸。pack(changed):使接收者的尺寸變成預先設定的尺寸。redraw():使接收者的全部邊界變成準備重繪狀態(tài)。redraw(狀態(tài)。x,y,width,height,all):使接收者的指定位置變成準備重繪removeControlListener(ControlListener listener):移除 ControlListener。 removeFocusListener(FocusListener

43、listener):移除 FocusListener。 removeHelpListener(HelpListener listener):移除 HelpListener。 removeKeyListener(KeyListener listener):移除 KeyListener。 removeMouseListener(MouseListener listener):移除 MouseListener。 removeMouseMoveListener(MouseMoveListener listener):移除 MouseMoveListener。removeMouseTrackListen

44、er(MouseTrackListener listener):移除 MouseTrackListener。removePaListenaListener listener):移除 PaListener。removeTraverseListener(TraverseListener listener):移除 TraverseListener。setBackground(Color color):設定接收者的背景顏色。setBackgroundImage(Image image):設定接收者的背景。setBounds(x,y,width,height):設定接收者的尺寸和位置。setBounds

45、(Rectangle rect):由指定的位置設定接收者的尺寸和位置。setCapture(capture):如果設置為 true,則所有的鼠標時間都將發(fā)送到接收者那里。setCursor(Cursor cursor):設定光標。setEnabled(enabled):設定可操作。setFocus():設定獲得焦點。 setFont(Font font):設定字體。setForeground(Color color):設定前景色。setLayoutData(Object layoutData):設定布局。setLocation(setLocation(Pox,y):設定位置。location)

46、:設定位置(重載)。105第 2 篇SWT 應用set():設定菜單。ite parent):設定父類。 redraw):設定重繪。height):設定尺寸。setParent(ComsetRedraw(setSize(setSize(Powidth,size):設定尺寸(重載)。setToolTipText(String string):設定說明文字。setVisiboolean visible):設定可見。4.5常 用 組 件SWT 集成了桌面程序中的各種組件,通過這些組件就可以寫出外觀優(yōu)美功能強大的界面程序。本節(jié)逐個介紹各種常用組件,這些組件都繼承自“Control”類,所以前面提到的常

47、用方法都可以在這些類中使用到。有些程序為了講解方便給出了行號,但只是當前程序段中的行號,并不是在整個程序中的位置。4.5.1按鈕按鈕(button)是界面中最常用的控制元素。SWT 中的按鈕有 SWT.PUSH(單擊按鈕)、 SWT.TOGGLE(鎖定按鈕)、SWT.ARROW(箭頭按鈕)、SWT.RADIO(單選按鈕)和 SWT.CHECK(復選按鈕)等。1SWT.PUSH(單擊按鈕)圖 4-24 所示是一個簡單的單擊按鈕,它是最普通的按鈕。在程序中還可以添加對按鈕的說明提示。初始化該按鈕的代碼如下,之后的代碼都會省略對名字空間的和類的定義等,也不再展示 S設置,只展示空間本身的代碼。圖 4

48、-24 所示的“this is a button”是功能提示,當鼠標移動到按鈕上方的時候會自動出現(xiàn)。程序的第 1 行是初始化,將當前的按鈕到 S中去,把 S作為按鈕的父類。這里為其指定的按鈕類型是“SWT.PUSH”。在第 2 行中設定其文字顯示,為“o World”。然后在第 3 行中設定文字提示。最后使用 pack()方法由系統(tǒng)去重新設定按鈕的大小。按鈕的外觀除了這個之外還有平面按鈕和有邊界按鈕兩種,這是很早的 Windows3.1 的風,如圖 4-25 所示。格按鈕,現(xiàn)在看起來似乎有一些不圖 4-24單擊按鈕圖 4-25按鈕樣式106Button button = new Button

49、(s,SWT.PUSH);button.setText(o World);button.setToolTipText(this is a button);button.pack();第 4 章SWT 組件這 3 種按鈕除了在初始化按鈕時用了不同的參數(shù),其他方面的設計是一樣的。在程序的第 7 行多出了一行控制顯示位置的代碼是靠獲得前一個控件的相對位置來排布的。如果不加這行代碼,產(chǎn)生的結果是所有按鈕在同一個位置2SWT.TOGGLE(鎖定按鈕),無法正常顯示。鎖定按鈕是一種狀態(tài)按鈕,有按下和彈起兩種狀態(tài)。鎖定按鈕同樣有 3 種樣式,初始化代碼如下:鎖定按鈕的彈起按鈕和一般的按鈕沒有區(qū)別,圖4-26

50、 所示為各種樣式的按鈕被按下的107Bu tt on bu tt on = n ew Bu tt on ( s, SWT . TOGGLE ) ;/ TOGG按LE鈕bu tt on . s e t Te x t ( o Wo r l d ) ;bu tt on . s e t Too l T i pTe x t ( t h i s i s a bu tt on ) ;bu tt on . p ac k () ;/ /設置樣式 5Bu tt on bu t ton2 = new Bu tt on ( s, SWT .TOGGLE | SWT .FLAT ) ; / FLAT 按鈕bu tt o

51、n2 . s e tBound s ( bu t ton . g e tBounds () . x+bu tt on . g e t Bound s () . wi d t h*2 , bu tt on . g e t Bound s () . y , 50 , 50 ) ;bu tt on2 . s e t Te x t ( o Wo r l d ) ;/ /設置位置bu tt on2 . s e t Too l T i pTe x t ( t h i s i s a FLAT TOGGu tt on ) ;bu tt on2 . p ac k () ; 11Bu tt on bu tt o

52、n3 = n ew Bu tt on ( s, SWT . TOGGLE | SWT . BORDER) ;/ BORDER按鈕bu tt on3 . s e tBound s ( bu t ton2 . g e t Bound s () . x+bu t ton2 . g e t Bound s () . w i d t h*2 , bu tt on . g e t Bound s () . y , 50 ,1450 ) ;/ /設置按鈕的大小及位置bu tt on3 . s e t Te x t ( o Wo r l d ) ;/ /設置按鈕上的顯示文字bu tt on3 . s e t

53、Too l T i pTe x t ( t h i s i s a BORDER TOGGu tt on ) ;bu tt on3 . p ac k () ;Bu tt on bu tt on = n ew Bu tt on ( s, SWT . PUSH) ;bu tt on . s e t Te x t ( o Wo r l d ) ;bu tt on . s e t Too l T i pTe x t ( t h i s i s a bu tt on ) ;bu tt on . p ac k () ; 5Bu tt on bu tt on2 = n ew Bu tt on ( s, SW

54、T . FLAT ) ;/按鈕bu tt on2 . s e tBound s ( bu t ton . g e tBounds () . x+bu tt on . g e t Bound s () . wi d t h*2 , bu tt on . g e t Bound s () . y , 50 , 50 ) ;bu tt on2 . s e t Te x t ( o Wo r l d ) ;/ /設置位置bu tt on2 . s e t Too l T i pTe x t ( t h i s i s a FLAT bu tt on ) ;/ /設置樣式bu tt on2 . p ac

55、 k () ;/ /調(diào)整大小11Bu tt on bu tt on3 = n ew Bu tt on ( s, SWT . BORDER) ;bu tt on3 . s e tBound s ( bu t ton2 . g e t Bound s () . x+bu t ton2 . g e t Bound s () . w i d t h*2 , bu tt on . g e t Bound s () . y , 50 ,1450 ) ;bu tt on3 . s e t Te x t ( o Wo r l d ) ;bu tt on3 . s e t Too l T i pTe x t (

56、 t h i s i s a BORDER bu tt on ) ;bu tt on3 . p ac k () ;第 2 篇SWT 應用狀態(tài)。對比圖 4-25,除了中間的平面按鈕樣式?jīng)]有改變之外,其他兩種按鈕都有向下凹陷的效果。3SWT.ARROW(箭頭按鈕)箭頭按鈕的樣式更類似器中的一些按鈕。按鈕的箭頭是有方向的,如圖 4-27 所示,每個按鈕同樣有“SWT.PUSH”、“SWT.FLAT”和“SWT.BORDER”3 款樣式可以選擇。圖 4-26圖 4-27鎖定按鈕樣式箭頭按鈕4.5.2單選按鈕和復選框1單選按鈕(SWT.RADIO)在同一組中,單選按鈕每次只能有一個被選中,如圖 4-28

57、 所示。如何設定組需要涉及容器類的概念。容器類是一個比較復雜的概念,這里不深入展開,只需要明白其就是放置和取出各種對象,用于管理各種對象的類。這里使用了 SWT 中的一個簡單的容器“Group”(分組)。參考代碼如下:108Group group = new Group(s,SWT.SHADOW ETCHED OUT); /設定容器final FormData fd group = new FormData();fd_group.bottom = new FormAttaent(0, 122);圖 4-28單選按鈕Button button = new Button (s,SWT.ARROW|

58、SWT.ARROW UP); /上按鈕 button.setToolTipText(this is a ARROW button);button.pack();Button button2 = new Button (s,SWT.ARROW|SWT.DOWN);/下按鈕 button2.setBounds(button.getBounds().x+button.getBounds().width*2,button.getBounds().y, 50, 50); button2.setToolTipText(this is a ARROW DOWN button); button2.pack()

59、;Button button3 = new Button (s,SWT.ARROW|SWT.LEFT);/左按鈕 button3.setBounds(button2.getBounds().x+button2.getBounds().width*2,button.getBounds().y, 50,50); button3.setToolTipText(this is a ARROW LEFT button); button3.pack();Button button4 = new Button (s,SWT.ARROW|SWT.RIGHT);/右按鈕 button4.setBounds(bu

60、tton3.getBounds().x+button2.getBounds().width*2,button.getBounds().y, 50,50);button4.setToolTipText(this is a ARROW RIGHT button); button4.pack();第 4 章SWT 組件首先在第 1 行了一個“Group”類作為所有單選按鈕的容器“group”。以后其中每一個單選按鈕都會將其設置為父類。然后需要設置該“Group”類的位置。這里使用“FormData”類來控制“Control”類的擺放,這里對比單選按鈕的分布方式,兩種分布都可以實現(xiàn),后面的例子將會“F

溫馨提示

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

評論

0/150

提交評論