感觉用Java开发web app是非常普遍的,工具啊,库啊都非常丰富,那么如果用Java开发一个普通的桌面应用,有哪些GUI库可供选择呢?
一、AWT
Abstract Window Toolkit, 是Java中引入最早的GUI库,它是对native system的一个封装,真正的窗口渲染还是由操作系统功能提供的,这使得用awt写的UI,其在不同的系统上显示是不一样的 - 都是按照目标系统的风格显示的。
AWT提供了两个层面的Java API:一个是对native system的窗口,事件等基本机制的封装; 二是提供了如button,checkbox等现成的控件。
AWT是JFC[1]的一部分
二、Swing
AWT和Swing都是JavaSE的组成部分,但Swing提供了更为丰富的功能与控件,如 tabbed panel, scroll panes, trees, tables和lists等
而且因为Swing使用Java2D实现,所有代码都是java,无需依赖于native system,因此,其look&feel可以在不同系统建保持一致 - 但你同时又可以调整让其以native system的风格显示,可以说更加灵活。
Swing采用了MVC架构。
三、 SWT
Standard Widget Toolkit, Eclipse出品,和AWT一样,SWT同样也是使用JNI访问native system api实现,使用SWT的程序是跨平台的,但是SWT的实现本身,却需要为每个平台都实现一份。
SWT是集合了Swing和AWT的一些特点:它和AWT一样调用了native函数,运行效率高且保持了native的look&feel,但同时它有提供了Swing一样强大的功能和丰富的控件。
虽然SWT本身不支持MVC架构,但Eclipse提供了另一个基于SWT的高层次的库:JFace,JFace不仅支持MVC架构,并且提供高层次的控件与UI机制, 如Viewer,Wizard, Action等
四、QT jambi
这是一个对著名C++ GUI库QT的java 封装,如果熟悉QT的话,用这个应该会比较贴心。
但Qt Jambi在10年被诺基亚放弃,而Qt又于近日被诺基亚放弃(12年五、六月份左右),玩去昂考opensource的力量在支撑,其前景有待考虑。
五、JavaFx
JavaFx是一种更高层次的GUI framework,一般可以用来构建internet、desktop、mobile、game console等UI,其竞争者有AJAX,Flash,Silverlight。
这个可能不是做一个简单的Java Desktop Application的好选择。
GUI Designer
开发GUI程序,而没有一个UI designer的话会是非常低效的,MyEclipse提供了一个针对Swing的Swing GUI Designer 10.6 [2],但是目前网络上多数指向它的链接都无法访问,据说其MyEclipse已经停止开发它了,所以感觉价值不是很高。但是google又一次大度的给出了Java GUI Design方面的神器:WindowsBuilder, 支持Swing和SWT,相当强大。
所以,用java开发一个desktop的程序时,我会选择swing(功能强大,且lightweight,无须转调native call), 配上WindowsBuilder.
[1] JFC = Java Fundation Classes (效仿MFC?) 其包括AWT, Swing和Java2D
[2] 又叫Matisse4MyEclipse, 其原型是Netbean中的UI designer Matisse