中華網校

系列網站: 中華網校 | www.網校.com | 3D模型 | 中華網校教育

電腦網校 | 業界新聞 | 職業網校 | 網校寶典 | 軟件下載 | 網校論壇 | 網校聯盟

電腦入門 | 網頁設計 | 網絡編程 | 圖形圖象 | 三維空間 | 多媒體 | 程序語言 | 操作系統 | 系統專題 | 辦公應用 | 軟件寶典 | 硬件天下 | 

 

您的位置:首頁 >> 網絡編程 >> JSP >> 新聞正文

在Eclipse中使用SWT進行界面設計  

作者:yipsilon  時間:2004-10-12 19:59:22  來自:CSDN  責任編輯:www.kxazyv.tw  閱讀次數:

1. 為什么要使用SWT?

  SWT是一個IBM開發的跨平臺GUI開發工具包。至于為什么IBM要費勁自己另起爐灶開發一個GUI工具包,而不是使用Sun現有的由AWT, Swing, Java 2D, Java 3D等構成的Java GUI框架,那就說來話長了。(記得在一個BBS上讀過一個關于SWT起源的調侃類的帖子)。

  在SWT之前,Sun已經提供了一個跨平臺GUI開發工具包AWT (Abstract Windowing Toolkit)。雖然AWT框架也使用的是原生窗口部件(native widgets),但是它一直未能突破LCD問題。LCD問題導致了一些主要平臺特征的遺失。如果你不明白的話(其實我也沒明白),換句話說,如果平臺A有窗口部件(widgets)1–40,而平臺B有窗口部件(widgets)20–25,那么跨平臺的AWT框架只能提供這兩個窗口部件集的交集。

  為解決這個問題,Sun又創建了一個新的框架。這個框架不再使用原生窗口部件,而是使用仿真窗口部件(emulated widgets)。這個方法雖然解決了LCD問題,并且提供了豐富的窗口部件集,但是它也帶來了新的問題。例如,Swing應用程序的界面外觀不再和原生應用程序的外觀相似。 雖然在JVM中這些Swing應用程序已經得到了最大程度的性能改善,但是它們還是存在著其原生對應物所不具有的性能問題。并且,Swing應用程序消耗太多的內存,這樣Swing不適于一些小設備,如PDA和移動電話等。

  IBM進行了嘗試以徹底解決AWT和Swing框架帶來的上述問題。最終,IBM創建了一個新的GUI庫,這就是SWT。SWT框架通過JNI來訪問原生窗口部件。如果在宿主(host)平臺上無法找到一個窗口部件,SWT就會自動地模擬它。

  2. SWT應用程序的組成

  一個SWT應用程序的基本組成部分為顯示界面(Display)、命令界面(Shell,使命令進入并使運行初始化)和窗口部件(Widgets)。Display負責管理事件循環和控制UI線程和其他線程之間的通訊。Shell是應用程序中被操作系統窗口管理器管理的窗口。每個SWT應用程序至少需要一個Display和大于等于1個的Shell實例。


圖1:從不同的角度看SWT應用程序

  圖1從不同的角度展示了SWT應用程序。左側的圖是一個簡化的UI對象的繼承圖。中間的圖展示了UI對象的容器結構(containment structure)。右側的圖則是創建后的UI外觀。

  如果一個應用程序使用了多個線程,那么每個線程都使用的是Display對象分配給它自己的實例。程序員可以使用靜態方法Display.getCurent()來得到Display對象的當前活動的實例。

  Shell用于在特定的操作系統中表現窗口。Shell可以最大化、最小化或正常化。Shell有兩種類型。第1種是高層shell,它是Display的子窗口,同時它也是一個主窗口。第2類是對話shell,這種shell要依賴于其他的shell窗口存在。shell窗口最終成為上述那種類型,要看在創建shell時傳遞給shell構造函數的是什么風格位(style bits)。一個shell的默認值是DialogShell。也就是說,如果不帶參數,那默認就是一個對話shell。而如果給參數賦予了一個Display對象,則該shell將是一個高層shell。

  一些窗口部件的屬性必須在創建它們的初期就要被設置。這些窗口部件的屬性就是前面所說的風格位(style bits)。在SWT的類中,風格位被定義為常數。例如,Button button = new Button( shell, <styleBits> )。可以使用或(OR)操作符“|”來設置多個風格位。例如,如果想設置一個帶邊界的壓下按鈕,需要傳遞SWT.PUSH | SWT.BORDER作為風格位參數。

  3. 進行SWT開發前的環境設置

  為了進行SWT應用開發,你需要把SWT庫添加到類路徑(classpath)上,并設置必要的環境變量。

  首先,你要在ECLIPSE_HOME\eclipse\plugins\org.eclipse.swt.win32_2.1.0\ws\win32目錄下找到swt.jar庫文件。注意這里的“org.eclipse.swt.win32_2.1.0”目錄是和Eclipse的版本有關的。實在找不到你就用文件搜索功能吧。然后依次打開下面窗口Project->Properies->JavaBuildPath->Libraries->Add Variable -> Eclipse Home ->Extend將swt.jar文件加到類路徑中。

  接著,你肯定想編譯這個SWT應用了。但是會出現下面所示的運行異常。出現這個異常的原因是swt.jar庫使用的是原生庫。你需要設置java.library.path環境變量來使用Java中的原生庫。

  控制臺(Console )的輸出如下:

java.lang.UnsatisfiedLinkError: no swt-win32-2136 in java.library.path
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at org.eclipse.swt.internal.Library.loadLibrary(Library.java:108)
at org.eclipse.swt.internal.win32.OS.<clinit>(OS.java:46)
at org.eclipse.swt.widgets.Display.internal_new_GC(Display.java:1291)
at org.eclipse.swt.graphics.Device.init(Device.java:547)
at org.eclipse.swt.widgets.Display.init(Display.java:1316)
at org.eclipse.swt.graphics.Device.<init>(Device.java:96)
at org.eclipse.swt.widgets.Display.<init>(Display.java:291)
at org.eclipse.swt.widgets.Display.<init>(Display.java:287)
at com.swtdesigner.trytry.main(trytry.java:24)
Exception in thread "main"

  按下面的步驟設置java.library.path變量:依次打開Run-> Run...-> Java Applicaton-> "Project" ->Arguments -> VM Arguments。在“VM Arguments”中輸入

-Djava.library.path=c:\eclipse\plugins\org.eclipse.swt.win32_2.1.0\os\win32\x86

  注意要輸入你自己的swt.jar所在的路徑。

  小技巧:加載原生庫:

  如果你需要加載自己應用程序所使用的原生庫,可以使用Runtime.getPlatform.loadLibrary("libraryname")方法。

  再編譯一次你的應用程序,這次通過了吧。

相關文章 最新文章 推薦文章
在Eclipse中使用SWT進行界面設計
Sun Java Web Server 能讓攻擊者遠程執行任意命令
Jboss下配置EJB
Jakarta-Tomcat 簡明中文版用戶指南
自己動手,結合javascript和dhtml做一個ubb編輯器(附例子代碼)
三種Web開發主流技術的評價之JSP
企業級N Tier體系結構解決方案討論(二)

  中華網校依法保護知識產權,如果我們的文章有涉及或侵犯您的有關權益,請即時與我們 聯系, 注明網址及文章,我們會即時處理或刪除,感謝您的合作!中華網校email
  中華網校由廣州市中六電腦城智銳計算機專業培訓學院及中華網校技術中心提供網絡支持未經本站許可任何個人網站、書刊報社一律不得私自復制,轉載本站內容!

關于中華網校 | 廣告服務 | 版權聲明 | 投稿指南 | 網站合作 | 友情鏈接 | 網站地圖

 

版權所有 中華網校 & 智銳網校 1999-2004 COPYRIGHT (C) 1999-2004 www.kxazyv.tw ALL RIGHTS RESERVED

 
河北快3