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

2022-08-31 05:51:49

Java有很多gui框架,但是今天公认的框架选择是什么呢?

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


断续器

是秋千的基础,它表现良好,但缺乏先进的组件。如果您打算创建丰富的应用程序,AWT可能不是要走的路。但是,对于不需要丰富用户界面的小型GUI应用程序。这可能非常适合,因为它是一个久经考验的框架。


摆动

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


断续器

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


SwingX

基于Swing,它的使命是为Swing创建丰富的组件。仍在开发中。(虽然不是很活跃。有一组非常好的组件,例如TreeTable。但是据我所知,TreeTable不支持过滤和排序。但是,它确实支持使用突出显示进行搜索。

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


JGoodies

一个我一无所知的框架...它的优势和劣势是什么?Jgoodies与其他组合有什么不同?

JGoodies OTOH是关于PLF和布局的。


JavaFX

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


Apache Pivot

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

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

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


Qt 占碑

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

http://qt-jambi.org/


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

假设我想今天用Java创建一个桌面应用程序,其中涉及许多高级组件,我应该选择什么?为什么呢?

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

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


我可能会后悔问这个,但无论如何我还是会尝试一下:

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

只是Java将他们的gui组件建立在低得多的水平上,并且可以编写所有这些我正在寻找的高级组件,但是您必须自己做很多工作(如果不是全部工作)?


答案 1

决策树:

  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。

    另一个薄弱领域是主题。截至今天,周围有很多主题。请参阅此处了解前 10 名。但有些是慢的,有些是有缺陷的,有些是不完整的。我讨厌当我编写UI时,用户抱怨某些东西不适合他们,因为他们选择了一个奇怪的主题。

  3. JGoodies是Swing之上的另一层,就像SwingX一样。它试图使Swing使用起来更愉快。该网站看起来很棒。让我们来看看教程...嗯......仍在搜索...坚持。网站上似乎根本没有文件。谷歌来救援。不,根本没有有用的教程。

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

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

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

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

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

    根据我的经验,更多的精力投入到代码中,而不是放在文档中。通过查看Pivot文档,必须花费大量精力来编写代码。请注意,当前存在一个错误,该错误会阻止某些示例在浏览器中工作(PIVOT-858)。

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

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

    有为。如果可以的话,试一试。


答案 2

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


推荐