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


228

有很多针对Java的gui框架,但是公认的当今选择框架是什么?

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


AWT

是挥杆的基础,它的性能不错,但缺少高级组件。如果您打算创建功能丰富的应用程序,那么AWT可能不是走的路。但是对于不需要丰富用户界面的小型GUI应用程序。这是一个久经考验的框架,因此可能非常适合。


摇摆

如前所述基于AWT。在起步阶段,它被认为是缓慢且容易出错的,并导致IBM为Eclipse创建SWT。但是,使用Java 5(或6?),Swing成为构建新应用程序的首选框架。Swing具有很多丰富的组件,但在某些方面仍然缺少。一个例子是,没有一个功能齐全的TreeTable组件可以进行排序和过滤/搜索。


SWT

由IBM为Eclipse创建的,他们似乎认为Swing当时不适合Eclipse。它本身是相当低级的,它通过JNI使用平台的本机窗口小部件。它根本与Swing和AWT不相关。但是,他们的API有点笨拙而且不直观。它们确实具有一些高级组件,例如TreeTable。(但我不认为它们支持开箱即用的排序和过滤)。SWT使用一些本机绑定(通过JNI?),互联网上的喧嚣声是该框架不应在当今的项目中使用。(为什么不?)


秋千

基于Swing,其任务是为Swing创建丰富的组件。仍在开发中。(尽管不是很活跃。)具有一组非常好的组件,例如TreeTable。但是据我所知,TreeTable不支持过滤和排序。但是它确实支持突出显示搜索。

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


嘉迪

我一无所知的框架...它的优点和缺点是什么?Jgoodies与其他产品有什么不同?

JGoodies OTOH是关于PLAF和布局的。


JavaFX

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


阿帕奇枢轴

它使用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组件,是否有可能编写我正在寻找的所有这些高级组件,但是您必须自己做很多工作(如果不是全部的话)?


我不知道SWT是“基于AWT和Swing的组合”。真的是这样吗?我以为调用操作系统的窗口系统是纯JNI ...
Rich

@Rich哦,有人在回答评论中说过。我只是假设他们知道他们在说什么。
netbrain 2011年

4
我认为您会混淆“ UI工具包”和“ GUI框架”。AWT,Swing和SWT是UI工具包,但我当然不会将它们称为“框架”。框架基于给定的UI工具包,并提供了构建应用程序的粘合剂。首先,您应该选择UI工具箱,然后选择适用于该工具箱的框架。FWIW,我会选择带有自己的自制Guts-GUI框架的Swing :-)
jfpoilpret 2011年

1
它几乎总是Swing与SWT的比较(至少对我而言),对于小的比较,您可以检查经验丰富的Java SWT程序员在转移到Swing时应注意哪些主要事项?..
Sorceror 2011年

2
JavaFX不再是预览SDK的一部分,可用于生产环境。请更新这篇文章。

Answers:


79

决策树:

  1. Qt和SWT之类的框架需要本机DLL。因此,您必须问自己:是否支持所有必需的平台?是否可以将本机DLL与您的应用程序打包在一起?

    请参阅此处,如何针对SWT执行此操作

    如果您在这里有选择,则应该选择Qt而不是SWT。Qt是由了解UI和桌面的人员开发的,而SWT是出于提高Eclipse速度的必要而开发的。它是Java 1.4的性能补丁,而不是UI框架。没有JFace,您将缺少许多主要的UI组件或UI组件的非常重要的功能(例如对表进行过滤)。

    如果SWT缺少您需要的功能,则该框架在扩展它方面有些敌意。例如,您不能在其中扩展任何类(这些类不是最终的,当的包this.getClass()不是时,它们只会抛出异常,org.eclipse.swt并且您不能在该包中添加新类,因为它已签名)。

  2. 如果您需要本机的纯Java解决方案,那么剩下的就剩下了。让我们从AWT,Swing,SwingX(Swing方式)开始。

    AWT已过时。Swing已过时(在过去的10年中,Swing可能更少,但未做太多工作)。您可能会说Swing很好,但是我们都知道代码会烂掉。对于当今的UI尤其如此。

    剩下的就是SwingX。经过一段漫长的缓慢发展之后,发展又恢复了。Swing的主要缺点在于,它依赖于一些古老的想法,这些想法在15年前非常前沿,但今天却显得“笨拙”。例如,表视图确实支持过滤和排序,但是您仍然必须进行配置。您必须编写许多样板代码才能获得一个感觉不错的现代UI。

    另一个弱点是主题。截至今天,围绕着许多主题。请参阅此处的前十名。但是有些很慢,有些是越野车,有些是不完整的。当我编写UI时,我讨厌它,用户抱怨某些东西对他们不起作用,因为他们选择了奇怪的主题。

  3. JGoodies是Swing之上的另一层,如SwingX。它试图使Swing更易于使用。该网站看起来很棒。让我们看一下教程... hm ...仍在搜索...等等。网站上似乎根本没有文档。Google进行了救援。不,根本没有有用的教程。

    我对UI框架充满信心,UI框架如此努力地向潜在的新粉丝隐藏文档。这并不意味着JGoodies是坏的。我只是找不到任何好话要说,但看起来不错。

  4. JavaFX。很棒,时尚。支持在那里,但我觉得它比严肃的UI框架更像是一个闪亮的玩具。这种感觉源于缺少复杂的UI组件(如树表)。有一个基于Webkit的组件来显示HTML

    当它被引入时,我的第一个想法是“五年为时已晚”。如果您的目标是针对手机或网站的不错的应用程序,那就好。如果您的目标是专业的桌面应用程序,请确保它满足您的需求。

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

    我的第一印象是不错。有大量的文档可帮助您入门。大多数示例都附带有在线演示(请注意:您必须在Web浏览器中启用Java;这会带来安全风险),因此您可以并排查看代码和生成的应用程序。

    以我的经验,代码比文档要花更多的精力。通过查看Pivot文档,代码中必须付出很多努力。请注意,当前存在一个错误,该错误使某些示例(PIVOT-858)无法在浏览器中运行。

    我对Pivot的第二印象是它易于使用。当我遇到问题时,通常可以通过看一个例子来快速解决。不过,我缺少每个组件支持的所有样式的参考。

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

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


尝试了Pivot演示“厨房水槽”,在打开一些组后,它继续消耗整个CPU。如果是因为Pivot设计,那么我绝对不希望在我的项目中使用它。
显示名称

好像我已经找到问题的根源,它的固定在以后的版本:apache-pivot-users.399431.n3.nabble.com/...
显示名称

2
JavaFX 8(适用于Java 8及更高版本)具有TreeTableView小部件。但是,JavaFX 2.2(适用于Java 7)缺少此功能,也缺少标准的错误和信息提示:请参阅stackoverflow.com/a/12760202/105137。另外,ControlsFX窗口小部件库仅适用于Java 8:fxexperience.com/controlsfx
kostmo,2013年

12

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


在您看来,SWT + JFace是否会像TreeTable这样具有列排序和过滤功能的高级组件成为大问题?
netbrain 2011年

@netbrain:我已经做过很多次了,使用JFace相当简单。这就是我所说的“ IDE式”界面的意思,也许不是单词的最佳选择。
ZsoltTörök

9

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

我简短地尝试了一下,它作为RIA(富Internet应用程序)框架ala Flash 提供的功能给我留下了深刻的印象。

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


1
我的印象是netbrain正在询问桌面应用程序。对于RIA框架,请同时考虑GWT和Vaadin。这些框架使您可以用Java编写,编译并获取在所有常见的Web浏览器上都能很好运行的JavaScript。
Costis Aivalis 2011年

无法将其应用于桌面应用程序?
netbrain 2011年

也许这只是定义问题,但是RIA框架基本上是为在浏览器中运行而设计的。
Costis Aivalis 2011年

2
@netbrain:是的,您可以将Pivot作为桌面应用程序(JFrame)或applet(JApplet)运行。
Augustus Thoo

9

Swing + SwingX + Miglayout是我的选择组合。Miglayout比Swings感知的200个不同的布局管理器要简单得多,而且功能强大得多。此外,它还为您提供了“调试”布局的功能,这在创建复杂的布局时特别方便。


8

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

你可能想看看左右摇摆对Qt的讨论在这里


5

我的个人看法:与NetBeans平台一起使用Swing。

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

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

另一个选择是将SWT与Eclipse RCP一起使用,但是将“纯” Swing组件集成到这样的应用程序中比较困难(尽管并非不可能)。

对于NetBeans平台而言,学习曲线有些陡峭(尽管我想对于Eclipse也是如此),但是我强烈推荐一些不错的书。


1
请注意,SwingX是组件(AFAIU),是现有Swing组件的扩展或组成。JGoodies OTOH是关于PLAF和布局的。但是正如您所说,这两者都可以与Swing无缝集成。
Andrew Thompson

1
+1将您的开发基于Swing。Swing是在AWT之上构建的,并包含轻量级的组件,这些组件在所有平台上的外观和行为均相同,因此您永远不应直接使用AWT组件。您可以轻松地将大量出色的Bean添加到开发GUI中,例如toedter.com JCalendar。
Costis Aivalis 2011年

1
@Andrew除了PLAF和布局外,JGoodies还提供更多功能:bean绑定(用于表示模型模式),验证和“ JSR-296类”框架(该框架是商业化的)。
jfpoilpret

3

您忘记了基于JSR296的Java Desktop Aplication作为NetBeans中的内置Swing框架

不包括AWT和JavaFX的所有您期望的框架都是基于Swing的,如果您从Swing开始,那么您将(清楚地)理解所有这些Swing(基于框架的)

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

所有那里的框架(我对JGoodies一无所知)包括。JavaFX没什么进展,很多Swing的基于框架都停止了,如果没有的话,没有最新版本

仅以我的观点-最好的就是SwingX,但需要有关Swing的最深刻的知识,

基于Swing的框架的外观


它们的一部分在AWT组件上,一部分在Swing JCompoentns上,但是在AWT和Swing之间与已实现,可访问和继承的方法有所不同,例如,Swing JComponents直接(API)直接从AWT实现许多继承或嵌套方法:-)
mKorbel

JSR296已死。它不再“维护”,并且对它的支持已从NetBeans中删除。(开始时从来都不是一个真正好的框架)
a_horse_with_no_name 2011年

@a_horse_with_no_name with same progress在SWT,SwingX,新所有者,新管理员中
正确-mKorbel

1
由IBM开发的SWT并非基于Swing,它是/曾经是一种竞争技术。Swing使用AWT。JavaFX也不基于Swing。这是一个全新的框架。有人称它为Swing的继任者,但仍不成熟,无法进行这场战斗。我目前正在做出完全相同的决定,而Swing是我的候选人,只是因为它是可用的最成熟但最现实的选择。
Gordon

1
SwingX是Swing的扩展(这就是为什么它需要Swing知识)的原因,实际上,某些SwingX的功能已集成到Swing本身中。
戈登

3

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


很高兴知道!因此,JIDE基于Swing创建了自己的组件...
netbrain 2011年

是的,JIDE已经制作了很多组件,涵盖了网格,树,表,图形等。就像我说的那样,它不是免费的,但是要花一些时间自己动手制作这些东西,最好使用已经制造的东西。此外,据我所知,JIDE在允许开放源代码项目使用其组件来交换其网站链接或“关于”对话框中的徽标方面具有灵活性。
sbrattla 2011年

3

我会选择Swing。对于布局,我将使用JGoodies表单布局。值得在此处研究有关“表单布局”的白皮书-http: //www.jgoodies.com/freeware/forms/

同样,如果您要开始开发大型桌面应用程序,则肯定需要一个框架。其他人指出了netbeans框架。我不太喜欢它,所以写了一篇新的书,现在我们在我的公司中使用。我已经将其放到sourceforge上,但是没有时间记录它。这是浏览代码的链接:

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

展示柜应向您展示如何实际进行简单登录。

如果您有任何疑问,请与我联系。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.