應該改進的Java Swing 2.0
這是一個很長的話題,自從“Sun:放棄Swing,主推JavaFX”,“Sun凍結Swing”的傳言出來,整個Swing社區對Sun放棄Swing的可能表示了強烈的反對,由于作為一個成熟Java UI技術,Swing擁有相當數量的開發者,在關于Swing的爭論中,要求Sun繼續支持Swing的聲音不斷,一些開發者也澄清了大眾對Swing的錯覺,詳見“關于Swing的六個謊言”。
在09年1月26日,Jonathan Giles 發表了他的博客:“Java Swing 2.0”,要求Sun對Swing 進行合理的改進。
Jonathan Giles 寫道
我相信不基于JavaFX的 Swing 2.0的改進非常必要,基于Java框架,專注于桌面開發。我和很多開發者交換了意見,我們認為Swing 2.0 應該有以下改進:
Generics-based 基于范型: 我們不再需要將我們的對象放入不同的Swing 數據模型和組件中,只是為了接受返回對象。它應該能夠通過指定數據類型創建swing 模型和組件。現在已經有了一個Swing-generics project 項目,雖然發展的有點慢,但是Swing2.0 應該包含這個項目,不需要重復工作。
Support for enumerations 支持枚舉:這個需要是非常明顯的,很多public static final int 數據 應該由枚舉替換。這可以讓API干凈很多。
改進對collection frameworks的支持:這就是說我們不需要一直使用Vector lists,除非絕對需要同步。
對事件分發線程 event dispatch thread (EDT) 規則的嚴格強制:Swing一直速度很慢,這并不是事實,但是讓人們這樣感覺,這個感覺存在,因為開發者不理解如何控制處理 EDT .現存代碼缺乏關于EDT 規則相關的強制,于是不能在EDT上運行的任務執行時間很長。所以,缺省的,Swing 2.0 必須進行EDT 驗證,拋出所有異常。這會讓開發者不爽,但是結果會讓程序運行更快,讓用戶滿意。這很值得。
改進bean綁定和驗證 :我不會說到我們需要 properties 那么遠,是因為還沒有足夠的信息給出確認的意見,我知道 JGoodies beans binding and validation 非常有用,讓創建數據驅動用戶界面容易并且迅速。Java Swing 2.0也應該吸取這些優點。
這篇博客得到了大量的回復和轉載,在Swing社區引起了強烈反饋。Sun 也隨后在官方博客“Swing and JDK 7”上做了回應:
sun 寫道
Swing對于Sun非常重要,我們擁有大量的開發者在Swing 上開發,Swing在Sun 的未來開發藍圖中,在富客戶端應用RIA方面,以及其他所有方面都擁有重要位置。
JavaFX也使用了很多Swing 的組件和桌面工具,Sun 很欣喜的看到基于Swing 出現了很多優秀的項目,比如: Griffon, Thinlet, Pivot 和 LWUIT等等。
所以,我們提升了 Swing 的重要性,甚至比JavaFX的下一個版本,甚至比 Java SE 6更重要,將花大力氣彌補 Swing 作為UI工具的一些不足,比如讓Swing開發更加簡單,比如更好的運行時runtime 部署和性能優化。這些方面的進展讓Swing開發者獲益,并且也讓其他依賴Swing的技術也獲得優勢。
對于Sun來說,在JDK 6 向 JDK 7 轉移的期間,首先最重要的是 讓運行時 runtime更加輕量化,更快下載,更快啟動,對瀏覽器兼容更好,提升runtime性能。在Java SE 6u10中,已經得到體現。第二個就是Swing 了,讓臃腫的Swing減少模板代碼和概念上的復雜性,開發典型的Swing應用將使用JDK 7中的 Swing Application Framework.
Sun 將通過OpenJDK 讓Sun以外的開發者更加容易為Swing貢獻代碼,我們已經和 XRender pipline team 團隊合作為Java在Unix平臺上提供更好的圖形加速性能。 在JDK 7中,我們將加入組件類似JXLayer,DatePicker, 和 CSS styling等等。
我們也熱切希望能夠在JavaFX中使用Swing的功能,尤其對聽到什么類型Swing應用能夠需要嵌入JavaFX組件有興趣。
綜上,就是Sun保證對Swing繼續開發,并且在JDK 7中加入Swing Application Framework.
現在Sun也遵守了諾言,Swing Application Framework (SAF) 開始向社區征詢意見。
Alexander Potochkin 發表了博客“Swing Application Framework is back again”。他提出了SAF面臨的問題,比如在同一個JVM中運行兩個SingleFrameApplication 沖突的問題;在Mac操作系統上,Swing很難提供原生的用戶界面等。希望SAF能夠成為一個理想的框架,解決Swing遇到的問題,過渡到Java Swing 2.0.
【編輯推薦】




















