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