一,前言
Java GUI开发中常用的库有AWT、SWING、SWT、JFACE和JavaFX,如果做几个窗口的小程序,选哪个库并不重要,
但是如果要开发几十个窗体的大客户端,你最好先把这篇文章看完。
二,Java GUI库的基本原理
要理解HeavyWeight与LightWeight组件,要先从GUI库的原理说起,Java GUI库为了满足跨平台特性,具体实现机制相当复杂,本人不才,这里就简单谈一下我自己大致的理解。
三大平台Windows、Linux、Mac都有自己的原生窗体组件,Linux更是有GNOME、KDE等多种桌面,要在这几大平台上抽象出一个统一的GUI库来,难度很大,所以第一个JavaGUI库AWT使用的策略是,提取出三大平台都支持的UI组件,封装成Java库(最大公约数策略),这样一来,AWT只实现一些基本组件,没有像树状图之类的复杂组件。后续的SWING填补了这一缺陷,用JAVA代码实现了很多复杂组件,这样SWING就相当于“AWT + Java代码”,为什么要说“Java代码”呢?因为AWT虽然也是java写的,但是UI组件还是调用系统自己UI组件库,而“Java代码”,则是SWING使用Java 2D类(Java 2D类再调用底层paint(Graphics))自己绘制窗体,SWING虽然界面内容更丰富,更好看,各平台风格更统一,但是因为使用Java 2D绘图,效率远不及调用系统原生组件的AWT。
那SWT和JFACE是什么?