Java GUI框架。選擇什么?Swing,SWT,AWT,SwingX,JGoodies,JavaFX,Apache Pivot?
請(qǐng)參閱此處,如何針對(duì)SWT執(zhí)行此操作。
如果你在這里有選擇,則應(yīng)該選擇Qt而不是SWT。Qt是由了解UI和桌面的人員開發(fā)的,而SWT是出于提高Eclipse速度的必要而開發(fā)的。它是Java 1.4的性能補(bǔ)丁,而不是UI框架。沒有JFace,你將缺少許多主要的UI組件或UI組件的非常重要的功能(例如對(duì)表進(jìn)行過濾)。
如果SWT缺少你需要的功能,則該框架在擴(kuò)展它方面有些敵意。例如,你不能在其中擴(kuò)展任何類(這些類不是最終類,當(dāng)?shù)陌黷his.getClass()不是時(shí),它們只會(huì)引發(fā)異常,org.eclipse.swt并且你不能在該包中添加新類,因?yàn)樗押灻?/p>如果你需要本機(jī)的純Java解決方案,那么剩下的就剩下了。讓我們從AWT,Swing,SwingX(Swing方式)開始。
AWT已過時(shí)。Swing已過時(shí)(在過去的10年中,Swing可能更少,但沒有做太多工作)。你可能會(huì)說Swing很好,但是我們都知道代碼會(huì)爛掉。對(duì)于當(dāng)今的UI尤其如此。
剩下的就是SwingX。經(jīng)過一段漫長的緩慢發(fā)展之后,發(fā)展又恢復(fù)了。Swing的主要缺點(diǎn)是它依賴于一些古老的想法,這些想法在15年前非常前沿,但在今天卻顯得“笨拙”。例如,表視圖確實(shí)支持過濾和排序,但是你仍然必須進(jìn)行配置。你必須編寫許多樣板代碼才能獲得一個(gè)感覺不錯(cuò)的現(xiàn)代UI。
另一個(gè)弱點(diǎn)是主題。到今天為止,周圍有很多主題。請(qǐng)參閱此處的前十名。但是有些很慢,有些是越野車,有些是不完整的。當(dāng)我編寫UI時(shí),我討厭它,用戶抱怨某些東西對(duì)他們不起作用,因?yàn)樗麄冞x擇了一個(gè)奇怪的主題。
JGoodies是Swing之上的另一層,如SwingX。它試圖使Swing更易于使用。該網(wǎng)站看起來很棒。讓我們看一下教程… hm …仍在搜索…繼續(xù)。網(wǎng)站上似乎根本沒有文檔。Google進(jìn)行了救援。不,根本沒有有用的教程。我對(duì)UI框架充滿信心,UI框架如此努力地向潛在的新粉絲隱藏文檔。這并不意味著JGoodies會(huì)很糟糕。我只是找不到任何好話要說,但看起來不錯(cuò)。
JavaFX。很棒,時(shí)尚。支持在那里,但我覺得它比嚴(yán)肅的UI框架更像是一個(gè)閃亮的玩具。這種感覺源于缺少復(fù)雜的UI組件(如樹表)。有一個(gè)基于Webkit的組件來顯示HTML。當(dāng)它被引入時(shí),我的第一個(gè)想法是“五年為時(shí)已晚”。如果你的目標(biāo)是為手機(jī)或網(wǎng)站開發(fā)一款不錯(cuò)的應(yīng)用程序,那就好。如果你的目標(biāo)是專業(yè)的桌面應(yīng)用程序,請(qǐng)確保它滿足你的需求。
樞。我第一次聽說。它基本上是一個(gè)基于Java2D的新UI框架。所以昨天我嘗試了一下。沒有搖擺,只有一點(diǎn)點(diǎn)的AWT(new Font(…))。我的第一印象是不錯(cuò)的。有大量的文檔可幫助你入門。大多數(shù)示例都隨網(wǎng)頁上的實(shí)時(shí)演示一起提供(注意:你必須在Web瀏覽器中啟用Java;這會(huì)帶來安全風(fēng)險(xiǎn)),因此你可以并行查看代碼和生成的應(yīng)用程序。
以我的經(jīng)驗(yàn),代碼比文檔要花更多的精力。通過查看Pivot文檔,代碼中必須付出很多努力。請(qǐng)注意,當(dāng)前存在一個(gè)錯(cuò)誤,該錯(cuò)誤使某些示例(PIVOT-858)無法在瀏覽器中運(yùn)行。
我對(duì)Pivot的第二印象是它易于使用。當(dāng)我遇到問題時(shí),通常可以通過看一個(gè)例子來快速解決。不過,我缺少每個(gè)組件支持的所有樣式的參考。
與JavaFX一樣,它缺少一些更高層次的組件,例如樹表組件(PIVOT-306)。我沒有嘗試使用表視圖進(jìn)行延遲加載。我的印象是,如果基礎(chǔ)模型使用延遲加載,那就足夠了。
有希望。如果可以,請(qǐng)嘗試一下。
解決方法有很多針對(duì)Java的gui框架,但是公認(rèn)的當(dāng)今選擇框架是什么?
以下是我對(duì)不同框架的理解,如果我錯(cuò)了,請(qǐng)指正。這是一組定義很松散的問題,但是我仍然認(rèn)為這對(duì)任何想創(chuàng)建豐富的GUI應(yīng)用程序的人都非常有價(jià)值。
AWT
是揮桿的基礎(chǔ),它表現(xiàn)良好,但缺少高級(jí)組件。如果你打算創(chuàng)建豐富的應(yīng)用程序,那么AWT可能不是走的路。但是對(duì)于不需要豐富用戶界面的小型GUI應(yīng)用程序。這是一個(gè)久經(jīng)考驗(yàn)的框架,因此可能非常適合。
Swing
如前所述基于AWT。在起步階段,它被認(rèn)為是緩慢且有故障的,并導(dǎo)致IBM為Eclipse創(chuàng)建SWT。但是,在Java 5(或6?)中,Swing成為構(gòu)建新應(yīng)用程序的首選框架。Swing具有很多豐富的組件,但在某些方面仍然缺乏。一個(gè)例子是,沒有一個(gè)功能齊全的TreeTable組件可以進(jìn)行排序和過濾/搜索。
SWT
由IBM為Eclipse創(chuàng)建的,他們似乎認(rèn)為Swing當(dāng)時(shí)不適合Eclipse。它本身是相當(dāng)?shù)图?jí)的,它通過JNI使用平臺(tái)的本機(jī)窗口小部件。它根本與Swing和AWT不相關(guān)。但是,他們的API有點(diǎn)笨拙且不直觀。他們確實(shí)有一些高級(jí)組件,例如TreeTable。(但我不認(rèn)為它們支持開箱即用的排序和過濾)。SWT使用某些本機(jī)綁定(通過JNI?),互聯(lián)網(wǎng)上的喧囂聲是該框架不應(yīng)在當(dāng)今的項(xiàng)目中使用。(為什么不?)
SwingX
基于Swing,其任務(wù)是為Swing創(chuàng)建豐富的組件。仍在開發(fā)中。(雖然不是很活躍。)具有一組非常好的組件,例如TreeTable。但是據(jù)我所知,TreeTable不支持過濾和排序。但是它確實(shí)支持突出顯示搜索。
請(qǐng)注意,SwingX是組件(AFAIU),是現(xiàn)有Swing組件的擴(kuò)展或組成
JGoodies
一個(gè)我一無所知的框架…它的優(yōu)點(diǎn)和缺點(diǎn)是什么?Jgoodies與其他產(chǎn)品有什么不同?
JGoodies OTOH與PLAF和布局有關(guān)。
JavaFX
Java / Oracle的最新旗艦。有望成為開發(fā)豐富桌面或Web應(yīng)用程序的事實(shí)標(biāo)準(zhǔn)。
Apache Pivot
它使用Java2D渲染UI,從而最大程度地減少了Swing和AWT的(IMO,腫的)遺產(chǎn)影響。(@Augustus Thoo)
它的主要焦點(diǎn)似乎在RIA(豐富的Internet應(yīng)用程序)上,但是它似乎也可以應(yīng)用于桌面應(yīng)用程序。作為個(gè)人評(píng)論,看起來非常有趣!我特別喜歡這是一個(gè)Apache項(xiàng)目。
https://cwiki.apache.org/PIVOT/frequently-asked-questions-faq.html
Qt Jambi
用c / c ++編寫的本地qt庫的Java包裝器。非常強(qiáng)大,被廣泛使用并被接受。具有大量的GUI組件和易于使用的API。
http://qt-jambi.org/
因此,嘗試總結(jié)一下我在問什么:
假設(shè)我今天想用Java創(chuàng)建一個(gè)包含許多高級(jí)組件的桌面應(yīng)用程序,我應(yīng)該選擇什么?又為什么呢?
這些框架中的哪一個(gè)應(yīng)該被認(rèn)為已過時(shí),哪些應(yīng)該被認(rèn)為是遙遠(yuǎn)的未來?
當(dāng)今的事實(shí)上的標(biāo)準(zhǔn)框架是什么?你使用哪些工具來創(chuàng)建Java GUI應(yīng)用程序?
我可能會(huì)后悔提出這個(gè)問題,但還是不愿意嘗試:
據(jù)說C#/。Net具有一組非常好用的組件,可以在各個(gè)方向上靈活應(yīng)用。在某種程度上研究了不同的Java框架之后,我似乎對(duì)Java并沒有說同樣的話。為什么是這樣?為什么Java(世界上使用最廣泛的編程語言)沒有相同的GUI組件集?
難道Java只是在較低的基礎(chǔ)上提供了gui組件,是否有可能編寫我正在尋找的所有這些高級(jí)組件,但是你必須自己做很多(如果不是全部的話)工作?
相關(guān)文章:
