有很多针对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组件,是否有可能编写我正在寻找的所有这些高级组件,但是你必须自己做很多(如果不是全部的话)工作?
请参阅此处,如何针对SWT执行此操作。
如果你在这里有选择,则应该选择Qt而不是SWT。Qt是由了解UI和桌面的人员开发的,而SWT是出于提高Eclipse速度的必要而开发的。它是Java 1.4的性能补丁,而不是UI框架。没有JFace,你将缺少许多主要的UI组件或UI组件的非常重要的功能(例如对表进行过滤)。
如果SWT缺少你需要的功能,则该框架在扩展它方面有些敌意。例如,你不能在其中扩展任何类(这些类不是最终类,当的包this.getClass()不是时,它们只会引发异常,org.eclipse.swt并且你不能在该包中添加新类,因为它已签名)。
this.getClass()
org.eclipse.swt
AWT已过时。Swing已过时(在过去的10年中,Swing可能更少,但没有做太多工作)。你可能会说Swing很好,但是我们都知道代码会烂掉。对于当今的UI尤其如此。
剩下的就是SwingX。经过一段漫长的缓慢发展之后,发展又恢复了。Swing的主要缺点是它依赖于一些古老的想法,这些想法在15年前非常前沿,但在今天却显得“笨拙”。例如,表视图确实支持过滤和排序,但是你仍然必须进行配置。你必须编写许多样板代码才能获得一个感觉不错的现代UI。
另一个弱点是主题。到今天为止,周围有很多主题。请参阅此处的前十名。但是有些很慢,有些是越野车,有些是不完整的。当我编写UI时,我讨厌它,用户抱怨某些东西对他们不起作用,因为他们选择了一个奇怪的主题。
我对UI框架充满信心,UI框架如此努力地向潜在的新粉丝隐藏文档。这并不意味着JGoodies会很糟糕。我只是找不到任何好话要说,但看起来不错。
当它被引入时,我的第一个想法是“五年为时已晚”。如果你的目标是为手机或网站开发一款不错的应用程序,那就好。如果你的目标是专业的桌面应用程序,请确保它满足你的需求。
我的第一印象是不错的。有大量的文档可帮助你入门。大多数示例都随网页上的实时演示一起提供(注意:你必须在Web浏览器中启用Java;这会带来安全风险),因此你可以并行查看代码和生成的应用程序。
以我的经验,代码比文档要花更多的精力。通过查看Pivot文档,代码中必须付出很多努力。请注意,当前存在一个错误,该错误使某些示例(PIVOT-858)无法在浏览器中运行。
我对Pivot的第二印象是它易于使用。当我遇到问题时,通常可以通过看一个例子来快速解决。不过,我缺少每个组件支持的所有样式的参考。
与JavaFX一样,它缺少一些更高层次的组件,例如树表组件(PIVOT-306)。我没有尝试使用表视图进行延迟加载。我的印象是,如果基础模型使用延迟加载,那就足够了。
有希望。如果可以,请尝试一下。