在此,我無意討論SWT與Swing孰優孰劣,你要是真的對這個感興趣,能夠到williamchen的博客裏的Swing專欄看看,該專欄博主已經對SWT和Swing分析得很是透徹:html
http://blog.sina.com.cn/swingjavajava
Swing在1998 年底做爲Java 2的一部分發布了1.0,可是當時發佈的版本不論是性能仍是外觀都足以使人失望。雖然當時Swing小組的工程師使用了最前沿的技術,如設計模式,可是時 的Swing小組已經被性能、本地化外觀一致性問題以及許多錯誤深深陷住了,這些問題幾乎把整個項目拖垮。程序員
幸好,Swing小組堅持了下來,要否則今天咱們就不會看到像NetBeans這樣的IDE了。自從JDK1.5後,Java的性能已經有了巨大的改觀,如今1.6下,Swing的性能已經徹底不是問題。數據庫
那麼Swing的優點有那些呢?設計模式
l 優秀的設計,正如剛纔所說的,Swing從九十年代中期開始設計就用了當時最前沿的開發方法學。能夠說Swing在當今各類GUI庫中,設計是很是優雅的。app
l 輕量級框架
l 官方的存在JRE中,發佈程序不須要像SWT那樣還要捆綁本身的GUI庫異步
l 真正的平臺獨立,Swing組件由Java 2D繪製編輯器
l 輕易的更改面觀模式ide
l 強大的IDE支持,如今用NetBeans作界面,幾乎不用你敲一行代碼。
l Swing如今又多了一個殺手級框架Swing Application Framework (JSR 296)
下面開始個人第二篇Java博客
Swing Application Framework(如下簡稱SAF)致力於簡化Swing應用程序的開發,框架定義了對大多數桌面應用程序的共有的基礎設施:
l 應用程序生命週期管理,特別是GUI的啓動和關閉。
l 對資源管理和載入的支持,這些資源是字符串,格式化的消息,圖像,顏色,字體以及桌面應用程序共有的其餘類型的資源。
l 對動做定義,管理和綁定的支持,其中包含了異步運行的動做(在後臺運行)。
l 持久化會話狀態:支持自動地,有選擇地保存應用程序一次運行到下次運行的GUI狀態。好比頂層的窗口幾何位置。
SAF已經定義了大多數桌面應用程序的基礎設施,咱們能夠更方便的開發Swing程序了,可是手動編碼開發GUI仍是讓不少人抓狂。能不能提供一個像VB同樣的環境,讓程序員更加專一於功能的實現而不是界面的實現?答案是確定的,NetBeans 6.0就爲開發SAF提供了這樣一個環境,甚至比VB還要作得更好。
那麼到底NetBeans6.0爲SAF提供了什麼樣的優點呢?
l 生成基礎框架,沒必要每次新建立一個程序的時候都從頭開始
l 唾手可得的國際化支持,在Netbeans裏對SAF程序國際化,簡單得不能再簡單
l 擁有Swing世界裏的明星級UI設計工具模塊Matisse提供的免費大餐
l 用NetBeans開發SAF,意味着你還可使用Beans Binding(JSR 295),數據綁定將問題變得更簡單
用NetBeans 6.0開發基於SAF,其實不用明白SAF,主要遵循必定的開發原則也能夠開發出穩定高效的SAF程序來
可是爲了你更深刻的理解SAF,強烈建議看下面的文章
l Using the Swing Application Framework (JSR 296)
http://java.sun.com/developer/technicalArticles/javase/swingappfr/
l Swing應用程序框架(Swing Application Framework)API緒論(JSR-296)之一
http://www.javaeye.com/topic/81326
Swing應用程序框架(Swing Application Framework)API緒論(JSR-296)之二
http://www.javaeye.com/topic/81327
l 若是你有更多的時間,那麼請看下面網址有關Swing的部分
http://blog.sina.com.cn/swingjava
JDK1.6或以上版本
NetBeans6.0或以上版本
提示:Netbeans 網站上提供有六種捆綁包下載
l Web & Java EE
l Mobility
l Java SE
l Ruby
l C/C++
l All
開發Swing Application Framework只須要Java SE下載包就好了
這樣能真正發揮NetBeans的性能!
咱們新建一個項目,從Java種類裏選擇 Java Desktop Application,以下圖
點擊下一步,接着輸入項目名稱、項目存放地址和程序的主類
在Choose Application Shell裏面咱們選擇Basic Application,單擊完成
提示:咱們若是建立基於Swing的數據庫程序,那麼選擇BataBase Application將提供極大的便利。可是在這裏我只是介紹Basic Application,也就是如今咱們用SAF開發普通的桌面程序。
l META-INF/services目錄
該目錄通常存在一個JAR包裏面
META-INF/services目錄涉及一個模式:服務提供者模式
引入該模式通常是爲了程序鬆散耦合,並且是IoC(控制反轉)的另外一種實現方式
服務提供者模式通常有兩個角色
² 服務 :通常爲一個抽象類
² 服務提供者 :抽象類的實現
存在META-INF/services目錄的JAR包通常爲一個「服務提供者」
用NetBeans開發中小型程序不須要服務提供者概念,若是你要深刻理解
能夠Baidu或Google一下META-INF/services
l foo包
foo包是咱們建立程序的主類foo.FooApp時,NetBeans自動爲咱們生成的,
咱們來看看NetBeans爲咱們生成了什麼基礎框架類:
1、FooApp.java
FooApp.java裏面的代碼是NetBean爲咱們生成的,開發簡單的程序這裏基本上不須要更改什麼。
2、FooAboutBox.java
每一個程序都應該有一個關於界面,Netbeans爲咱們生成了關於的模板
修改相應文字就能夠了,固然也能夠本身作個About界面
3、FooView.java
FooView.java是程序View部分的關鍵,因爲生成的代碼比較多
在解釋代碼以前,我先看看Design部分
NetBenas給咱們生成的框架很是簡單明瞭
須要注意的是圖上標識的兩個地方
標有1的地區爲消息地區,咱們的程序完成任務後,在這裏提示消息
標有2的地區爲任務進度條,程序執行任務時在這裏現實任務進度,固然任務有肯定模式和不肯定模式,不肯定模式的進度條持續地顯示動畫來表示正進行的操做。
接下來咱們看看FooView.java的構造器的代碼: