标准窗口小部件工具箱

“标准窗口小部件工具箱”(SWT)是 Java 开发者的窗口小部件工具箱,它提供可移植的 API,并与底层本机操作系统图形用户界面平台紧密集成。

许多低级别的用户界面编程任务是在 Eclipse 平台的较高层处理的。例如,用户界面添加项的 plugin.xml 标记指定菜单和工具栏内容,而不需要进行任何 SWT 编程。另外,JFace 查看器和操作实现了应用程序与窗口小部件之间的普通交互作用。然而,底层 SWT 体系结构和设计原理方面的知识对于了解平台的其它部分是如何工作的是很重要的。

可移植性和平台集成

窗口小部件工具箱设计中的常见问题是可移植工具箱与平台集成之间的平衡。Java AWT(抽象窗口工具箱)为较低级别的窗口小部件(例如,列表、文本和按钮)提供了平台集成的窗口小部件,但是没有提供对较高级别的平台组件(例如,树或丰富文本)的访问权。这强制应用程序开发者进入“最小公分母”情况,在这种情况下,他们只能使用所有平台上都可用的窗口小部件。

Swing 工具箱试图通过提供高级别窗口小部件(例如,树、表和文本)的非本机实现来解决此问题。这提供了许多功能,但使得在 Swing 中开发的应用程序因为不同而显得很突出。平台外观模拟层帮助应用程序看起来更象平台,但是用户交互有很大不同,足够引起注意。这使得很难使用模拟的工具箱构建应用程序与为特定操作系统平台专门开发的包装好的应用程序竞争。

SWT 通过定义在所有受支持的平台上提供的常见可移植 API 来解决此问题,并尽可能使用本机窗口小部件在每个平台上实现该 API。这允许工具箱在所有平台上维护一致的编程模型时立即反映底层操作系统图形用户界面外观中的任何更改。

“最小公分母”问题是由 SWT 按几种方式来解决的:

与平台的一致性

平台集成严格说来并不是外观问题。通过紧密集成,能够与本机桌面功能部件(例如,拖放)交互作用、与操作系统桌面应用程序集成以及使用利用操作系统组件模型(例如,Win32 ActiveX)开发的组件。

仅用于 WindowsSWT ActiveX 支持在文章 ActiveX Support in SWT 中讨论。

通过提供本机操作系统开发者熟悉的实现,同时在代码本身中获得了一致性。SWT 为每个平台提供了采用 Java 的不同实现,而不是隐藏本机 C 语言代码中的操作系统区别或试图在 Java 实现中构建可移植和非可移植的层。

一个重要的实现规则是使用 C 语言的本机程序与对操作系统的调用进行一一映射。Windows 程序员将立即识别 Windows 上的 SWT 工具箱的实现,因为它使用直接映射至在 C 语言中使用的系统调用的本机程序。没有任何“平台幻数”隐藏在 C 语言代码中。平台开发者可以查看代码,并确切地知道哪些平台调用是由工具箱执行的。这极大地简化了调试。如果在调用本机方法时发生了故障,则从 C 语言代码中使用相同参数来调用平台 API 将产生相同的故障。(可以在 Java 本机程序的 SWT 实现策略中找到关于此问题的完整讨论。)

法律声明。