Java界面設計 Swing(1)

Java界面設計的用途

開發者能夠經過Java SE開發豐富而且強大的具備圖形界面的桌面應用程序。也能夠設計一些提升效率的工具軟件,幫助本身處理機械性工做。編程

 

Java 的圖形界面工具包,能夠用於工具類軟件開發、管理類軟件開發、通用客戶端開發、銀行客戶端軟件開發、Eclipse 插件開發等方向。在許多知名的大型軟件中,都可以見到 Java 的身影,如某些版本的 Photoshop、思惟導圖軟件、Eclipse、IDEA 開發環境等。瀏覽器

 

Java有多套GUI工具包,由於沒有一個能夠知足全部的要求。 Java的GUI工具包包含AWT, Swing和SWT,每一個工具包都有各自的優缺點,開發者能夠根據本身的需求和目標來選擇適當的工具包。app

 

AWT 簡介

Abstract Windows Toolkit(AWT)是最原始的 Java GUI 工具包。AWT的主要優勢是,它是每一個Java版本的標準配置,包括早期的Web瀏覽器中的Java實現;而且很是穩定。這意味着咱們不須要單獨安裝這個工具包、在任何一個Java運行環境中均可以使用它。框架

它是一個很是簡單的具備有限 GUI 組件、佈局管理器和事件的工具包(如窗體、文本標籤、按鈕、菜單等)。這是由於Sun公司決定爲AWT使用一種最小公分母的方法,只提供全部操做系統都有的控件。所以它只會使用爲全部Java主機環境定義的GUI組件。編輯器

因爲AWT要依賴於主機GUI的對等體(peer)控件(其中每一個AWT組件都有一個並行的主機控件或者對等體)來實現這個GUI,這個GUI的外觀和行爲在不一樣的主機上會有所不一樣。這與Java的「一次編寫,到處運行」理念衝突,因此AWT有侷限性。工具

 

Swing 簡介

Java Swing 是 Java Fundation Classes ( JFC ) 的一部分,它試圖解決AWT的缺點。在 Swing 中,Sun 開發了一個通過仔細設計的,靈活而強大的GUI工具包。Swing 是在 AWT 組件基礎上構建的。Swing 使用了  AWT 的事件模型和支持類,例如 Colors、Images 和 Graphics。Swing 組件、佈局管理器以及事件比  AWT 提供的組件集更爲普遍,徹底知足各類開發需求。佈局

 

爲了克服在不一樣主機上行爲也會不一樣的缺點,Swing 對主機控件的依賴性降至了最低。實際上,Swing只爲諸如窗口和框架之類的頂層組件使用對等體, 好像是JFrame,JWinodows,JDialog(記不太清了,好像是這幾個)是調用本地操做系統的控件。大部分組件( JComponent 及其子類)都是使用純Java代碼來模擬的。這意味着Swing天生就能夠在全部主機之間很好地進行移植。所以,Swing一般看起來並非本地程序。實際上,它有不少外觀,有些模擬不一樣的主機外觀,有些則提供了獨特的外觀。性能

 

Swing 對基於對等體的組件使用的術語是重量級(Heavyweight),對於模擬的組件使用的術語是輕量級(llightweight)。實際上,Swing 能夠支持在一個GUI中混合使用重量級組件和輕量級組件,例如在一個 JContainer 中混合使用AWT和Swing控件。 Swing 具備如下優點:測試

  基於 MVC 結構ui

  可編程外觀

  呈現器與編輯器

  支持以任意順序構建 GUI

  可訪問性

  支持自動銷燬

  是標準 Java 的一部分

SWT 簡介

IBM更喜歡AWT的實現機制,作出了SWT,SWT採用的是最大公倍數的作法。SWT大部分都是用的本地操做系統的控件,一些在windows裏有的控件可能在linux下沒有,對這種控件才採用本身繪製的方式。SWT採用相似JAVA虛擬機的方式,在不一樣的平臺,有不一樣的開發包,咱們寫的java代碼是同樣的,但不一樣平臺下看起來外觀是不同的,但性能提高很高,聽說和C++作的界面速度差很少:)

SWT 也是基於對等體實現的,在這點上與 AWT 類似。它克服了 AWT 所面臨的 LCD 的問題,方法以下:它定義一組控件,它們能夠用來構建大部分辦公應用程序或者開發者工具,而後能夠按照逐個主機的原則,爲特定主機所沒有提供的空間建立模擬控件(這與 Swing 相似)。對大部分現代主機來講,幾乎全部的控件都是基於本地對等體的。這意味着基於 SWT 的 GU I既具備主機的外觀,又具備主機的性能。這樣就避免了使用 AWT 和 Swing 而引發的大部分問題。特定的主機具備一些低級功能控件,所以 SWT 提供了擴充(一般是模擬的)版本(一般使用 「C」 做爲名字中的第一個字母),從而能夠產生更一致的行爲。

 

在SWT中,對等體只是主機空間上的一些封裝程序而已。這意味這SWT應用程序其實是一個主機應用程序,它必然會所有繼承主機的優缺點。這還意味着SWT不能徹底實現 「一次編寫,到處運行」 的目標;它更像是一種 「一次編寫,到處測試」 的解決方案。這就是說,SWT景觀不如Swing那麼優秀,可是它在建立可移植解決方案方面是傑出的。SWT具備如下特色:

  不支持GUI自動銷燬

  僅支持自頂向下構建GUI

  對Java2D的支持不夠完善

  不屬於標準Java的一部分

 

使用哪個GUI工具包?

Swing是最靈活,強大的GUI工具包,因此在界面開發中,首選Swing, 他能夠勝任絕大多數開發工做。

只有一種場合不適用於Swing: 在使用SWT開發的程序上繼續編寫界面,好比爲Eclipse開發插件(由於Eclipse是基於SWT構建的)。SWT與Swing不兼容,它們不能混合使用。

引一名話:this is equivalent to asking whether a harmmer is better than a screw driver,of course ,a hammer wieldded with sufficient force can probably drive a screw into a wall ,and the butt of a screw can be used in a pinch to knock in a nail. However, a good carpenter keeps both harmer and screw drivers in her tool box and will use the tool that is appropriate for the job at hand.

我的感受之前 Java 作界面徹底沒有優點,從外觀到性能(我很喜歡Swing的look and feel,能夠改變風格),SWT的出現改變了性能上的缺點,再加上JFace,及Eclipse的RCP,我仍是傾向於用SWT。

相關文章
相關標籤/搜索