久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

在Eclipse中使用SWT進(jìn)行界面設(shè)計(jì)

 funson 2007-07-01

在Eclipse中使用SWT進(jìn)行界面設(shè)計(jì)

  1. 為什么要使用SWT?

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

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

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

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

  2. SWT應(yīng)用程序的組成

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


圖1:從不同的角度看SWT應(yīng)用程序

  圖1從不同的角度展示了SWT應(yīng)用程序。左側(cè)的圖是一個(gè)簡化的UI對(duì)象的繼承圖,。中間的圖展示了UI對(duì)象的容器結(jié)構(gòu)(containment structure),。右側(cè)的圖則是創(chuàng)建后的UI外觀。

  如果一個(gè)應(yīng)用程序使用了多個(gè)線程,,那么每個(gè)線程都使用的是Display對(duì)象分配給它自己的實(shí)例,。程序員可以使用靜態(tài)方法Display.getCurent()來得到Display對(duì)象的當(dāng)前活動(dòng)的實(shí)例。

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

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

  3. 進(jìn)行SWT開發(fā)前的環(huán)境設(shè)置

  為了進(jìn)行SWT應(yīng)用開發(fā),,你需要把SWT庫添加到類路徑(classpath)上,并設(shè)置必要的環(huán)境變量,。

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

  接著,,你肯定想編譯這個(gè)SWT應(yīng)用了,。但是會(huì)出現(xiàn)下面所示的運(yùn)行異常。出現(xiàn)這個(gè)異常的原因是swt.jar庫使用的是原生庫,。你需要設(shè)置java.library.path環(huán)境變量來使用Java中的原生庫,。

  控制臺(tái)(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"

  按下面的步驟設(shè)置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所在的路徑,。

  小技巧:加載原生庫:

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

  再編譯一次你的應(yīng)用程序,,這次通過了吧,。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多