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

java中有相当多的GUI框架,但是被认为是今天的框架呢?

以下是我对不同框架的理解,如果我错了,请纠正我。 这是一个非常松散的问题,但我仍然认为它对任何想创build丰富的gui应用程序的人都有价值。


AWT

是摆动的基础,它performance良好,但缺乏先进的组件。 如果你打算创build丰富的应用程序,AWT可能不是要走的路。 但是对于不需要丰富的用户界面的较小的gui应用程序。 这可能是完美的,因为它是一个久经考验的框架。


摇摆

如前所述基于AWT。 在起步阶段,它被认为是缓慢和错误的,并导致IBM为Eclipse创buildSWT。 然而,Java 5(或6?)Swing成为构build新应用程序的首选框架。 Swing有很多丰富的组件,但在某些领域仍然缺乏。 一个例子是没有一个全function的TreeTable组件可以进行sorting和过滤/search。


SWT

由IBM为Eclipse创build,他们似乎认为Swing当时不适合Eclipse。 本身是相当低级的,它通过JNI使用平台的本地小部件。 这与Swing和AWT无关。 他们的API有点笨重,不直观。 他们有一些像TreeTable一样的高级组件。 (但我不认为他们支持sorting和过滤框)。 SWT使用一些本地绑定(通过JNI?),互联网上的咆哮是这个框架不应该在今天的项目中使用。 (为什么不?)


SwingX

基于Swing,它的使命是创build丰富的组件。 还在开发中。 (虽然不是非常活跃)。有一组非常好的组件,例如TreeTable。 但据我所知,TreeTable不支持过滤和sorting。 但是它支持高亮显示。

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


JGoodies数据

一个我一无所知的框架…它的优点和缺点是什么? 其余的Jgoodies是什么?

JGoodies OTOH是关于PLAF和布局。


JavaFX的

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


Apache枢轴

它使用Java2D呈现UI,从而最大限度地减lessSwing和AWT(IMO,膨胀)遗留的影响。 (@Augustus Thoo)

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

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


Qt Jambi

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

http://qt-jambi.org/


所以,试图总结一下我在问什么:

假设我今天想用Java创build一个桌面应用程序,其中包含许多高级组件,我应该select什么? 为什么?

哪一个框架应该被认为是被弃用的,哪些应该被认为是遥远未来的框架?

什么是今天的事实标准的框架,你用什么工具来创buildJava GUI应用程序?


我可能会后悔问这个问题,但不pipe怎样,

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

是不是只是把java的gui组件放在了一个更低的层次上呢,而且可以编写所有这些正在寻找的高级组件,但是如果不是所有的工作你都要做很多工作呢?

决策树:

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

    看到这里,如何为SWT做这个 。

    如果你在这里有一个select,你应该更喜欢Qt而不是SWT。 Qt是由了解UI和桌面的人开发的,而SWT是为了使Eclipse更快而开发的。 对于Java 1.4来说,这是一个比UI框架更好的性能补丁。 如果没有JFace,你会错过很多主要的UI组件或UI组件的非常重要的特性(比如过滤表格)。

    如果SWT缺less一个你需要的function,那么这个框架对于扩展它有点不利。 例如,你不能在其中扩展任何类(类不是最终的,当this.getClass()的包不是org.eclipse.swt时,它们只会抛出exception,而你不能添加新的类该包因为它已签署)。

  2. 如果你需要一个本地的,纯粹的Java解决scheme,那么剩下的就是你。 我们从AWT,Swing,SwingX开始 – Swing的方式。

    AWT已经过时了。 Swing已经过时了(在过去的10年里,Swing可能没有太多工作要做)。 你可能会认为Swing开始是好的,但我们都知道代码腐烂。 对于今天的用户界面尤其如此。

    这使你与SwingX。 经过较长时间的缓慢进展, 发展再次回升 。 Swing的主要缺点是它挂在一些15年前那种stream血的边缘,但是今天感觉“笨拙”的旧观念。 例如,表视图确实支持过滤和sorting,但是您仍然需要configuration它。 你将不得不写很多的锅炉板代码,只是为了得到一个体面的用户界面,感觉很现代。

    另一个弱点是主题。 截至今天,围绕着很多主题。 看到这里的前10名 。 但有些是缓慢的,有些是越野车,有些是不完整的。 我讨厌它,当我写一个用户界面,用户抱怨说他们select了一个奇怪的主题。

  3. JGoodies是Swing之上的另一个层,就像SwingX一样。 它试图使Swing使用起来更愉快。 该网站看起来不错。 让我们来看看教程…嗯…仍在search…挂上。 在网站上似乎没有任何文件。 谷歌去救援 。 没有,根本没有用的教程。

    我对用户界面框架感到不自信,这个框架试图隐藏潜在的新粉丝的文档。 这并不意味着JGoodies是不好的; 我只是找不到什么好说的,但它看起来不错。

  4. JavaFX的。 太棒了,时尚。 支持在那里,但我觉得它比一个严重的UI框架更像是一个shiny的玩具。 这种感觉源于缺乏复杂的UI组件,比如树型表。 有一个基于webkit的组件来显示HTML 。

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

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

    我的第一印象是一个很好的。 有一个广泛的文档,可以帮助您开始。 大多数示例都带有实时演示 (注意:您必须在Web浏览器中启用Java; 这是安全风险 ),因此您可以并排查看代码和生成的应用程序。

    根据我的经验,更多的努力进入代码而不是文档。 通过查看Pivot文档,必须付出很多努力。 请注意,目前有一个在浏览器中阻止一些示例工作的错误( PIVOT-858 )。

    我对Pivot的第二印象是使用起来很简单。 当遇到问题时,我通常可以通过查看一个例子来快速解决问题。 虽然我错过了每个组件支持的所有样式的引用。

    和JavaFX一样,它缺less像树表组件( PIVOT-306 )这样的高级组件。 我没有尝试懒加载表视图。 我的印象是,如果底层模型使用延迟加载,那就足够了。

    有希望。 如果可以,请尝试一下。

SWT本身是相当低级的,它通过JNI使用平台的本地小部件。 这与Swing和AWT无关。 Eclipse IDE和所有基于Eclipse的富客户端应用程序(如Vuze BitTorrent客户端 )都是使用SWT构build的。 另外,如果您正在开发Eclipse插件,则通常会使用SWT。
近5年来,我一直在开发基于Eclipse的应用程序和插件,所以我显然是有偏见的。 不过,我也拥有使用SWT和build立在其上的JFace UI工具包的丰富经验。 我发现JFace非常有钱, 在某些情况下,甚至可能是selectSWT的主要原因。 它使您能够快速创build工作用户界面,只要它像IDE一样(包括表,树,本地控件等)。 当然你也可以整合你的自定义控件,但这需要额外的努力。

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

我简单地尝试了一下,并且对它作为一个RIA(富互联网应用程序)框架ala Flash提供了什么印象。

它使用Java2D呈现UI,从而最大限度地减lessSwing和AWT的(IMO,膨胀)遗留的影响。

Swing + SwingX + Miglayout是我的select组合。 Miglayout比Swings更容易理解200个不同的版面pipe理者,而且function更强大。 此外,它还为您提供“debugging”布局的能力,这在创build复杂布局时特别方便。

另一个select是使用Qt Jambi 。 几乎所有的Qt(很多组件,很好的文档,易于使用)的伟大​​,没有C ++的麻烦。 三年前,我用了一个小项目,即使这个项目已经成熟了。

你可能想在这里看到关于Swing vs. Qt的讨论。

我的个人意见:与NetBeans平台一起去Swing。

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

如果没有一个基于底层UI框架的良好平台,我不会启动一个大的桌面应用程序(或者将会很大的应用程序)。

另一种select是SWT和Eclipse RCP,但是将“纯粹的”Swing组件集成到这样的应用程序中是困难的(虽然不是不可能)。

NetBeans平台的学习曲线有点陡峭(尽pipe我猜这对于Eclipse来说也是如此),但是我也强烈推荐一些好书。

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

不包括AWT和JavaFX都是基于Swing的被描述的框架,如果你从Swing开始,那么你会清楚地知道所有这些Swing的(基础框架)

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

所有的框架(我不知道更多关于JGoodies),包括。 JavaFX已经没有太长的时间了,很多Swing的基础框架都停滞了,如果不是那么没有最新的版本的话

只是我的看法 – 最好的是SwingX,但要求对Swing有最深入的了解,

基于Swing框架的外观和感觉

Swing对于我参与过的桌面应用程序,我一直很满意。但是,我不同意Swing提供的高级组件。 我在这些情况下所做的就是去JIDE。 这不是免费的,但也不是那么昂贵,它给你带来了更多的工具。 具体来说,他们提供了一个可过滤的TreeTable。

我会和Swing一起去的。 对于布局,我会使用JGoodies表单布局。 值得研究Form Layout中的白皮书 – http://www.jgoodies.com/freeware/forms/

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

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

展示应该告诉你如何做一个简单的login实际..

如果您有任何疑问,请告诉我,我可以帮忙。