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