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