界面设计中的LCD 有关问题,兼讨论AWT,Swing,SWT的用途

界面设计中的LCD 问题,兼讨论AWT,Swing,SWT的用途
几乎所有的 GUI工具包都要面临这个问题。这里的LCD可不是液晶显示器。LCD是“最小公分母”(Lowest Common Denominator)的缩写。说的有些含糊,我也懒得去查为什么会叫这个名字,但是知道LCD表示什么问题就行了。

这个问题就是:GUI工具包仅支持存在于所在平台上的窗口构件。例如AWT对Windows是没问题的,AWT在Windows上可以支持tree(树型控件、列表控件等),但是因为 Motif 没有提供本机树型窗口构件,AWT 就没有包含树型窗口构件。

Swing则走向了另一个极端。虽然带有一个很出色的 API 进行优雅地设计,Swing 还是自己实现窗口构件。因此 Swing 不依赖于操作系统提供窗口构件。无论本机是否支持,这都为 Swing 提供了不可思议的灵活性。但是,因为 Swing 自己绘制这些窗口构件,所以最终的外观看起来与本机应用程序有明显的不同。并且,由于要自己绘制这些构件,Swing的效率也较低。

SWT 试图弥合这两个 GUI 工具箱之间的差距。它的方向是:“如果在所在的OS上有本机窗口构件就使用它。如果没有,就模拟它。”前面提到的树型窗口构件就是这样一个示例。因为 Windows 支持本机树型窗口构件,所以在 Windows 上运行时,SWT 就使用它。但是,Motif 不支持树型窗口构件,因此 SWT 在 Motif 下运行时绘制其自己的窗口构件版本。使用 SWT,结果应用程序看起来与其本机的同类应用程序很相似,因为尽可能地使用了本机窗口构件。