Java GUI框架。选择什么? Swing,SWT,AWT,SwingX,JGoodies,JavaFX,Apache Pivot?

时间:2011-09-09 08:06:37

标签: java swing user-interface swt awt

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,它的使命是为挥杆创造丰富的组件。仍在开发中。 (虽然不是很活跃。)有一组非常好的组件,比如TreeTable。但据我所知,TreeTable不支持过滤和排序。但它确实支持突出显示搜索。

  

请注意,SwingX是扩展名或组件(AFAIU)   现有Swing组件的组成


JGoodies数据

我一无所知的框架......它的优点和缺点是什么?什么样的Jgoodies与其他人分开了?

  

JGoodies OTOH是关于PLAF和布局的。


JavaFX

Java / Oracle的最新旗舰。承诺成为开发富桌面或Web应用程序的事实标准。


Apache Pivot

它使用Java2D渲染UI,从而最大限度地减少了Swing和AWT(IMO,膨胀)遗产的影响。 (@Augustus Thoo)

它的主要焦点似乎是RIA(富互联网应用程序),但似乎它也可以应用于桌面应用程序。而作为个人评论,看起来很有趣!我特别喜欢这是一个apache项目。

https://cwiki.apache.org/PIVOT/frequently-asked-questions-faq.html


Qt Jambi

本地qt库的java包装器,用c / c ++编写。非常强大,广泛使用和接受。有很多GUI组件和易于使用的API。

http://qt-jambi.org/


所以,试着总结一下我要问的一点:

说我想用Java创建一个桌面应用程序,其中包含许多高级组件,我应该选择什么?为什么?

这些框架中的哪一个应被视为已弃用,哪些框架应被视为遥远未来的框架?

今天的事实标准框架是什么,您使用哪些工具来创建java gui应用程序?


我可能会后悔问这个问题,但不管怎么说都不好意思:

据说C#/ .Net有一套非常好用的易于使用的组件,可以在各个方向上弯曲。在调查了不同的java框架之后,我似乎无法对Java说同样的话。为什么是这样? 为什么java(世界上使用最广泛的编程语言)没有相同的GUI组件集?

只是java已经将gui组件基于更低的级别,并且可以编写我正在寻找的所有这些高级组件,但是如果不是所有的工作,你必须做很多事情吗?

9 个答案:

答案 0 :(得分:80)

决策树:

  1. 像Qt和SWT这样的框架需要本机DLL。所以你必须问自己:是否支持所有必要的平台?你可以用您的应用程序打包本机DLL吗?

    See here, how to do this for SWT

    如果你在这里有选择,你应该更喜欢Qt而不是SWT。 Qt是由了解UI和桌面的人开发的,而SWT的开发是为了使Eclipse更快。它更像是Java 1.4的性能补丁,而不是UI框架。如果没有JFace,您将缺少许多主要的UI组件或UI组件的非常重要的功能(例如对表进行过滤)。

    如果SWT缺少您需要的功能,则该框架对扩展它有点不利。例如,你不能在其中扩展任何类(这些类不是final,它们只是在this.getClass()的包不是org.eclipse.swt时抛出异常并且你不能在那个包,因为它已签名)。

  2. 如果您需要原生的纯Java解决方案,剩下的就剩下了。让我们从AWT,Swing,SwingX开始 - Swing方式。

    AWT已过时。 Swing已经过时(可能不那么严重,但过去10年来Swing的工作并不多)。你可以说Swing很开始,但我们都知道代码会腐烂。对于今天的UI来说尤其如此。

    这让你有了SwingX。经过较长时间的缓慢进展,development has picked up again。 Swing的主要缺点在于它依赖于一些古老的想法,这些想法在15年前非常流行,但今天感觉“笨拙”。例如,表视图确实支持过滤和排序,但您仍需要配置它。为了获得一个感觉很现代的体面用户界面,你必须编写很多样板代码。

    另一个薄弱领域是主题。截至今天,围绕着很多主题。 See here for a top 10。但有些是慢的,有些是马车,有些是不完整的。当我写一个用户界面时,我讨厌它而且用户抱怨某些东西对他们不起作用,因为他们选择了一个奇怪的主题。

  3. JGoodies是Swing之上的另一层,就像SwingX一样。它试图使Swing更加愉快。该网站看起来很棒。我们来看看教程......嗯...还在搜索......坚持下去。似乎网站上根本没有文档。 Google to the rescue。不,没有任何有用的教程。

    我对UI框架没有信心,因为它非常难以隐藏潜在新粉丝的文档。这并不意味着JGoodies很糟糕;我只是找不到任何好的说法,但看起来很不错。

  4. JavaFX的。很棒,很时尚。支持是存在但我觉得它更像是一个闪亮的玩具而不是一个严肃的UI框架。这种感觉源于缺乏像树表这样复杂的UI组件。有webkit-based component to display HTML

    当它被引入时,我的第一个想法是“五年太晚了”。如果你的目标是一个很好的手机或网站应用程序,那么好。如果您的目标是专业的桌面应用程序,请确保它提供您所需的。

  5. 枢轴。我第一次听说了。它基本上是一个基于Java2D的新UI框架。所以昨天我试了一下。没有Swing,只是一小部分AWT(new Font(...))。

    我的第一印象很好。有一个广泛的文档可以帮助您入门。大多数examples come with live demos(注意:您必须在Web浏览器中启用Java; 这是一个安全风险),因此您可以看到代码和生成的应用程序端旁边。

    根据我的经验,代码而不是文档需要付出更多努力。通过查看Pivot文档,必须付出很多努力才能进入代码。请注意,目前存在一个错误,导致某些示例无法在您的浏览器中运行(PIVOT-858)。

    我对Pivot的第二印象是它易于使用。当我遇到问题时,我通常可以通过查看示例来快速解决问题。我错过了每个组件支持的所有样式的引用。

    与JavaFX一样,它缺少一些更高级别的组件,如树表组件(PIVOT-306)。我没有尝试使用表格视图进行延迟加载。我的印象是,如果底层模型使用延迟加载,那就足够了。

    有前途的。如果可以的话,试一试。

答案 1 :(得分:13)

SWT本身相当低级,它通过JNI使用平台的本机小部件。它根本与Swing和AWT无关。 Eclipse IDE和所有基于Eclipse的富客户端应用程序(如Vuze BitTorrent client)都是使用SWT构建的。另外,如果您正在开发Eclipse插件,通常会使用SWT 我已经开发了基于Eclipse的应用程序和插件近5年了,所以我显然有偏见。但是,我在使用SWT和基于它的JFace UI toolkit方面也有丰富的经验。我发现JFace非常富有和强大;在某些情况下,它甚至可能是选择SWT的主要原因。它使您能够非常快速地启动工作UI,只要它像IDE一样(包括表,树,本机控件等)。当然,您也可以集成自定义控件,但这需要额外的努力。

答案 2 :(得分:11)

我想建议另一个框架:Apache Pivot http://pivot.apache.org/

我对它进行了简要的尝试,并对它作为RIA(富Internet应用程序)框架 ala Flash提供的内容印象深刻。

它使用Java2D渲染UI,从而最大限度地减少了Swing和AWT(IMO,臃肿)遗产的影响。

答案 3 :(得分:9)

Swing + SwingX + Miglayout是我选择的组合。 Miglayout比Swings更容易理解200个不同的布局管理器,而且功能更强大。此外,它还为您提供了“调试”布局的功能,这在创建复杂布局时尤其方便。

答案 4 :(得分:9)

另一种选择是使用Qt Jambi。它几乎具有Qt的所有优点(许多组件,良好的文档,易于使用),没有C ++的麻烦。我在3 - 4年前用它来做一个小项目,即使那时它几乎已经成熟了。

您可能希望看到有关Swing vs. Qt here的讨论。

答案 5 :(得分:5)

我的个人观点:与NetBeans平台一起使用Swing。

如果您需要高级组件(超过NetBeans提供),您可以轻松地集成SwingX而不会出现问题(或JGoodies),因为NetBeans平台完全基于Swing。

如果没有构建在底层UI框架上的良好平台,我就不会启动大型桌面应用程序(或者会变得很大)。

另一个选项是SWT和Eclipse RCP,但是将“纯”Swing组件集成到这样的应用程序中会更难(尽管不是不可能)。

NetBeans平台的学习曲线有点陡峭(尽管我认为Eclipse也是如此)但是我会强烈推荐一些好书。

答案 6 :(得分:4)

您忘记了基于JSR296的Java桌面应用程序作为NetBeans中的内置Swing框架

除了AWT和JavaFX之外你所有的desrbed框架都基于Swing,如果你从Swing开始那么你就可以理解(清楚)所有这些Swing(基础框架)

ATW,SWT(Eclipse),Java桌面应用程序(Netbeans),SwingX,JGoodies

所有框架(我不知道更多关于JGoodies的内容)incl。 JavaFX已经有很长时间没有任何进展,很多Swing的基础框架都被停止了,如果不是没有最新的版本

只是我的观点 - 最好的是SwingX,但需要最深入的Swing知识,

对于基于Swing的框架

Look and Feel

答案 7 :(得分:3)

对于我参与过的桌面应用程序,我对Swing感到非常满意。但是,我确实在Swing上分享您对高级组件的看法。我在这些案例中所做的就是去JIDE。它不是免费的,但也不是那么昂贵,它为你提供了更多的工具。具体来说,它们确实提供了可过滤的TreeTable。

答案 8 :(得分:3)

我会选择Swing。对于布局我会使用JGoodies表单布局。值得研究表格布局的白皮书 - http://www.jgoodies.com/freeware/forms/

此外,如果您要开始开发庞大的桌面应用程序,您肯定需要一个框架。其他人指出了netbeans框架。我不喜欢它,所以写了一个新的,我们现在在我的公司使用。我把它放在sourceforge上,但是没有时间把它记录下来。这是浏览代码的链接:

http://swingobj.svn.sourceforge.net/viewvc/swingobj/

展示会告诉你如何进行简单的登录..

如果您对此有任何疑问,请告诉我,我可以提供帮助。