概述SWT采用AWT和Swing的一些優(yōu)點
SWT也采用AWT和Swing的構件的布局
我們最常用的圖形構件基本都被包括在*.widgets包中,比如Button,Combo,Text,Label,Sash,Table等等。其中兩個最重要的構件當數(shù)Shell和Composite。Shell相當于應用程序的主窗口框架,上面的例子代碼中就是應用Shell構件打開一個空窗口。 Composite相當于Swing中的Panel對象,充當著構件容器的角色,當我們想在一個窗口中加入一些構件時,最好到使用Composite作為其它構件的容器,然后再去*.layout包找出一種合適的布局方式。
SWT對構件的布局也采用了AWT和Swing中Layout和Layout Data結合的方式,在*.layout包中可以找到四種Layout和與它們相對應的布局結構對象(Layout Data)。在*.custom包中,包含了對一些基本圖形構件的擴展,比如其中的CLabel,就是對標準Label構件的擴展,上面可以同時加入文字和圖片,也可以加邊框。StyledText是Text構件的擴展,它提供了豐富的文本功能,比如對某段文字的背景色、前景色或字體的設置。在*.custom包中也可找到一個新的StackLayout布局方式。
SWT對用戶操作的響應,比如鼠標或鍵盤事件,也是采用了AWT和Swing中的Observer模式,在*.event包中可以找到事件監(jiān)聽的Listener接口和相應的事件對象,例如常用的鼠標事件監(jiān)聽接口 MouseListener,MouseMoveListener和MouseTrackListener,及對應的事件對象MouseEvent。
*.graphics包中可以找到針對圖片、光標、字體或繪圖的API。比如可通過Image類調用系統(tǒng)中不同類型的圖片文件。通過GC類實現(xiàn)對圖片、構件或顯示器的繪圖功能。
對不同平臺,Eclipse還開發(fā)了一些富有針對性的API。例如,在Windows平臺,可以通過*.ole.win32包很容易的調用ole控件,這使Java程序內嵌IE瀏覽器或Word、Excel等程序成為可能!
要進一步了解SWT的情況,可以在Eclipse IDE的幫助文檔中找到SWT的JavaDoc說明。當然最深入的了解莫過于去讀SWT的源代碼,這也正是開放源代碼項目對程序員的魅力所在!
更復雜的程序
下面讓我們展示一個比上面例子更加復雜一些的程序。這個程序擁有一個文本框和一個按鍵,當用戶點擊按鍵的時候,文本框顯示一句歡迎信息。
為了文本框和按鍵有比較合理的大小和布局,這里采用了GradLayout布局方式。這種布局是SWT中最常用也是最強大的布局方式,幾乎所有的格式都可能通過GradLayout去達到。下面的程序也涉及到了如何應用系統(tǒng)資源(Color),以及如何釋放系統(tǒng)資源。
系統(tǒng)資源的管理
在一個圖形化的操作系統(tǒng)中開發(fā)程序,都要調用系統(tǒng)中的資源,如圖片、字體、顏色等。通常這些資源都是有限的,程序員務必非常小心的使用這些資源:當不再使用它們時,就請盡快釋放,不然操作系統(tǒng)遲早會油盡燈枯,不得不重新啟動,更嚴重的會導致系統(tǒng)崩潰。
SWT是用Java開發(fā)的,Java語言本身的一大優(yōu)勢就是JVM的"垃圾回收機制",程序員通常不用理會變量的釋放,內存的回收等問題。那么對SWT而言,系統(tǒng)資源的操作是不是也是如此?答案是一個壞消息,一個好消息。
壞消息是SWT并沒采用JVM的垃圾回收機制去處理操作系統(tǒng)的資源回收問題,一個關鍵的因素是因為JVM的垃圾回收機制是不可控的,也就是說程序員不能知道,也不可能做到在某一時刻讓JVM回收資源!這對系統(tǒng)資源的處理是致命的,試想你的程序希望在一個循環(huán)語句中去查看數(shù)萬張圖片,常規(guī)的處理方式是每次調入一張,查看,然后就立即釋放該圖片資源,而后在循環(huán)調入下一張圖片,這對操作系統(tǒng)而言,任何時刻程序占用的僅僅是一張圖片的資源。但如果這個過程完全交給JVM去處理,也許會是在循環(huán)語句結束后,JVM才會去釋放圖片資源,其結果可能是你的程序還沒有運行結束,操作系統(tǒng)已經宕掉。
但下面的好消息也許會讓這個壞消息變得無關緊要。對于SWT,只需了解兩條簡單的"黃金"法則就可以放心的使用系統(tǒng)資源!之所以稱為黃金法則,一是因為少,只有兩條,二是因為它們出奇的簡單。第一條是"誰占用,誰釋放",第二條是"父構件被銷毀,子構件也同時被銷毀"。第一條原則是一個無任何例外的原則,只要程序調用了系統(tǒng)資源類的構造函數(shù),程序就應該關心在某一時刻要釋放這個系統(tǒng)資源。
【編輯推薦】