1. 一個SWT應用程序的基礎材料
Display, Shell和Widgets是一個SWT應用程序的基礎材料。Displays用于管理事件循環(event loops)和控制UI線程和其他線程之間的通訊。Shell是應用程序中由操作系統窗體管理器來管理的窗體。任何SWT應用程序都需要至少一個Display實例和1個或更多的Shell實例。
圖1 說明了一個SWT應用程序的不同看法。第一幅圖是簡化的UI對象的繼承圖。第二幅圖是UI對象的包含結構。第三幅圖就是創建了的UI。
如果一個應用程序使用多個線程,每個線程使用自己的Display對象實例。那么你可以通過使用靜態的Display.getCurent()方法得到當前活躍的Display對象實例。
一個Shell表示一個特別操作系統中的一個窗口。一個Shell可以最大化,正常化,和最小化。有兩種類型的shell。一種是頂層(top-level)Shell作為Display的主窗口創建的,另一種是依賴于其他shell的對話shell。
Shell的類型是由傳給Shell構造函數的style位決定的。Shell的默認值是對話Shell。也就是說,如果沒有傳遞任何值給構造函數參數,那么創建的是默認的對話Shell。如果一個Display對象作為參數,那么它是頂層(top-level)Shell。
有些窗口組件(widget)的屬性必須在創建時設定。這些窗口組件(widget)屬性叫做style bits。Style bits是在SWT類中定義的常量。如Button button = new Button( shell,
3. 環境設置
開發一個SWT應用程序與開發一個Swing應用程序不同。為了可以開始一個SWT應用程序的開發,你需要把SWT庫加到classpath中,同時設置好對應的必要的環境變量。
第一個需要的庫是swt.jar文件,它位于ECLIPSE_HOME\eclipse\plugins\org.eclipse.swt.win32_2.1.0\ws\win32目錄。根據你使用的Eclipse版本,你可能需要使用不同的目錄。這個swt.jar文件必須加到你的classpath中,為此到Project->Properies->JavaBuildPath->Libraries->Add Variable -> Eclipse Home ->Extend并按上述路徑選擇swt.jar庫,然后單擊OK。
然后,你可以編譯SWT應用程序,但是由于拋出下邊所示的運行時異常,無法運行它,因為swt.jar使用了本地庫。你需要設置java.library.path環境變量來在Java中使用本地庫。
要設置java.library.path變量,到Run-> Run...-> Java Applicaton-> New ->Arguments -> VM Arguments。然后,如何需要,如下修改path,把它粘貼到VM Arguments部分。-Djava.library.path=c:\eclipse\plugins\org.eclipse.swt.win32_2.1.0\os\win32\x86
裝載本地庫
如果你需要裝載應用程序使用的任何本地庫,你可以使用Runtime.getPlatform.loadLibrary("libraryname")方法。
完成這些步驟,你就可以在你的eclipse環境下運行SWT程序了。
4. 你的第一個SWT應用程序
創建一個典型的SWT應用程序需要一下步驟:
創建一個Display
創建一個或多個Shells
設置Shell的Layout manager
創建Shell中的widgets
開啟Shell窗口
寫一個事件轉發循環
銷毀display
你可以使用下邊的代碼模板來快速的運行本文中的代碼片斷。你可以復制粘貼這些代碼至合適的區域。如源代碼1所示:
這個例子顯示了一個空的窗口。你可以加widget到上邊的模板。任何SWT應用程序需要 一個Display和一個或多個 Shells。這個Shell是個合成對象;它可以容納其他的合成對象。如果沒有設置shell的 layout,加到Shell的widget是不能看見的。Shell窗口必須 打開才能顯示。 事件處理循環讀取并轉發GUI事件。如果沒有事件處理循環應用程序窗口是無法顯示的。即使通過open()方法來打開Shell窗口。讓后,需要在Shell被丟棄的時候銷毀 Display。
導入需要的庫
你可以使用Source->Organize Imports菜單或者Ctrl+Shift+O來自動導入需要的庫。