熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

技術分析:使用Eclipse進行SWT編程(圖)

2013-11-23 20:10:47  來源: Java開源技術 

  The best way to predict the future is to invent it—Alan Kay
  
   為什麼要使用SWT?
  
  SWT是IBM開發一套跨平台的GUI開發框架為什麼IBM要創建另一種GUI呢?為什麼他們不使用現有的Java GUI框架呢?要回答這些問題我需要回到Java的早期時代
  
  Sun已經創建了一套跨平台的GUI框架 AWT (Abstract Windowing Toolkit) 這個AWT框架使用了本地窗口組件(native widgets)不過它存在LCD問題 這個LCD問題導致了它失去主要的平台特性換句話說如果平台A有窗口組件而平台B有窗口組件那麼這個跨平台的AWT框架只能提供這兩個集合的交集
  
  為了解決這個問題Sun創建了一個新的框架使用模擬窗口組件(emulated widgets)來代替本地窗口組件(native widgets)這個方法解決了LCD問題同時提供了豐富的窗口組件不過也產生了其他的問題例如Swing應用程序不再和本地程序在樣子上一致雖然JVM有了很大的改善 但是Swing應用程序仍然存在它們本地配對物所沒有的性能問題而且Swing應用程序消耗了太多的內存故不適合用於PDA和移動電話等小型設備
  
  IBM發現這些方法都無法滿足他們的需求因此IBM創建了新的GUI庫叫做SWT它解決了AWT和Swing框架中的問題SWT框架使用JNI訪問本地窗口組件(native widgets)如果一個窗口組件在主機平台上不能獲得那麼SWT會模擬這個不能獲取的窗口組件
  
   一個SWT應用程序的基礎材料
  
  Display Shell和Widgets是一個SWT應用程序的基礎材料Displays用於管理事件循環(event loops)和控制UI線程和其他線程之間的通訊Shell是應用程序中由操作系統窗體管理器來管理的窗體任何SWT應用程序都需要至少一個Display實例和個或更多的Shell實例
  
 

  圖 說明了一個SWT應用程序的不同看法第一幅圖是簡化的UI對象的繼承圖第二幅圖是UI對象的包含結構第三幅圖就是創建了的UI
  
  如果一個應用程序使用多個線程每個線程使用自己的Display對象實例那麼你可以通過使用靜態的DisplaygetCurent()方法得到當前活躍的Display對象實例
  
  一個Shell表示一個特別操作系統中的一個窗口一個Shell可以最大化正常化和最小化有兩種類型的shell一種是頂層(toplevel)Shell作為Display的主窗口創建的另一種是依賴於其他shell的對話shell
  
  Shell的類型是由傳給Shell構造函數的style位決定的Shell的默認值是對話Shell也就是說如果沒有傳遞任何值給構造函數參數那麼創建的是默認的對話Shell如果一個Display對象作為參數那麼它是頂層(toplevel)Shell
  
  有些窗口組件(widget)的屬性必須在創建時設定這些窗口組件(widget)屬性叫做style bitsStyle bits是在SWT類中定義的常量如Button button = new Button( shell )當然可以通過或操作|來使用多個style bit例如要使用一個有邊的按鈕你需要使用SWTPUSH | SWTBORDER作為style bit參數
  
   環境設置
  
  開發一個SWT應用程序與開發一個Swing應用程序不同為了可以開始一個SWT應用程序的開發你需要把SWT庫加到classpath中同時設置好對應的必要的環境變量
  
  第一個需要的庫是swtjar文件它位於ECLIPSE_HOME\eclipse\plugins\orgeclipseswtwin_\ws\win目錄根據你使用的Eclipse版本你可能需要使用不同的目錄這個swtjar文件必須加到你的classpath中為此到Project>Properies>JavaBuildPath>Libraries>Add Variable > Eclipse Home >Extend並按上述路徑選擇swtjar庫然後單擊OK
  
  然後你可以編譯SWT應用程序但是由於拋出下邊所示的運行時異常無法運行它因為swtjar使用了本地庫你需要設置javalibrarypath環境變量來在Java中使用本地庫
  
 educitycn/img_///jpg >

  要設置javalibrarypath變量到Run> Run> Java Applicaton> New >Arguments > VM Arguments然後如何需要如下修改path把它粘貼到VM Arguments部分Djavalibrarypath=c:\eclipse\plugins\orgeclipseswtwin_\os\win\x
  
  裝載本地庫
  
  如果你需要裝載應用程序使用的任何本地庫你可以使用RuntimegetPlatformloadLibrary(libraryname)方法
  
  完成這些步驟你就可以在你的eclipse環境下運行SWT程序了
  
   你的第一個SWT應用程序
  
  創建一個典型的SWT應用程序需要一下步驟
  
  創建一個Display
  
  創建一個或多個Shells
  
  設置Shell的Layout manager
  
  創建Shell中的widgets
  
  開啟Shell窗口
  
  寫一個事件轉發循環
  
  銷毀display
  
  你可以使用下邊的代碼模板來快速的運行本文中的代碼片斷你可以復制粘貼這些代碼至合適的區域如源代碼所示
  
educitycn/img_///jpg >

  這個例子顯示了一個空的窗口你可以加widget到上邊的模板任何SWT應用程序需要 一個Display和一個或多個 Shells這個Shell是個合成對象;它可以容納其他的合成對象如果沒有設置shell的 layout加到Shell的widget是不能看見的Shell窗口必須 打開才能顯示 事件處理循環讀取並轉發GUI事件如果沒有事件處理循環應用程序窗口是無法顯示的即使通過open()方法來打開Shell窗口讓後需要在Shell被丟棄的時候銷毀 Display
  
  導入需要的庫
  
  你可以使用Source>Organize Imports菜單或者Ctrl+Shift+O來自動導入需要的庫

From:http://tw.wingwit.com/Article/program/Java/ky/201311/28075.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.