标准部件工具箱(SWT)概述
标准部件工具箱概述
Translated By xiaotaoliang 04.12
标准部件工具箱为java开发者提供了轻量级的应用程序接口和潜在的本地操作系统图形用户界面平台集成功能。
很多低级别的用户界面编程任务是在Eclipse平台的高级别工具中处理的,譬如:无须SWT编程,界面接口集的plugin.xml文件就可以定义菜单和工具条的内容,另外,JFace视图和行为实现了应用程序和工具箱部件之间的交互。然而,关于SWT架构和设计思想的基础知识对于理解平台的其他构件的工作方式是很重要的。
轻量化与平台集成
工具箱设计的一个普遍问题是其轻量化与平台集成之间的矛盾。Java AWT提供了平台集成的低级别部件如lists,texts和buttons,但没有提供对高级别平台组件的存取方式,如trees或rich text。这迫使应用开发者进入一种“最小公分母”状态,即他们仅能使用所有平台上都可用的部件。
而Swing工具箱试图通过另外一种方式解决这个问题,即为高级别的部件如tress,tables和text提供非本地化的实现,这样功能丰富了很多,但却使得用Swing开发的应用失去了平台一致性。平台外观和视感模拟层帮助应用程序的外观和视感看起来尽量跟平台一致,但用户交互方式的差异太大,以至没有被注意到如何保证其平台一致性,这导致用模拟工具箱开发应用程序很难与专门针对特定操作系统平台开发的“收缩包装”的应用程序竞争。
SWT使用更为独特的方式解决这个问题:定义一组公用的、所有其所支持的平台都适用的轻量级应用程序接口,并在每个平台上尽可能地使用平台本地部件去实现这些接口。这样就允许工具箱直接反映操作系统图形用户界面的潜在的任何变化,同时在所有平台上保持一致的编程模型。
“最小公分母”问题在SWT的实现中以如下方式解决:
- 不是所有平台都支持,但通常对工作平台和工具插件有用的特性,就在不支持的平台上模拟之。例如,OSF/Motif2.1部件工具箱没有tree部件,因此SWT在Motif2.1上提供了模拟的tree部件,其应用程序接口与Windows本地实现是一致的。
- 不是所有平台都支持,但也不是被广泛应用的特性,SWT就忽略掉。譬如,Windows提供的日历部件SWT就不支持。
- 平台相关的特性,如ActiveX集成,只对相关的平台提供。平台相关的特性被拆分成不同的包,包中清晰表明不同的平台名称。
平台一致性
平台集成严格来说不是外观和视感的问题,紧密集成包括了某些本地桌面交互能力如拖放、操作系统桌面应用集成,还有使用在操作系统特定组件开发模型下开发的组件,比如Win32 ActiveX。 (SWT ActiveX支持将另具文描述)
通过在代码本身中提供为本地操作系统开发者所熟悉的实现方式,也能达到平台一致性。SWT放弃了这种方式:用C代码或尝试在Java实现中创建轻量级和非轻量级层次来隐藏操作系统的差别,而是在Java语言中为各个平台提供了截然不同的实现。
有一个重要的实现规则是:本地的C代码实现了对操作系统的一对一的调用映射,对于Windows平台上的SWT工具箱,一个Windows程序员可以立即看出来其实现方式,因为工具箱使用的本地代码直接对应了C代码的系统调用。C代码中没有隐藏任何“平台魔术”。一个平台开发者可以盯着代码并清楚知道工具箱执行了什么平台调用。这一点极大地简化了调试工作,如果调用本地方法失败,则用同样的参数从C代码中调用平台应用程序接口肯定会重现同样的失败。