标准小窗口工具箱

“标准小窗口工具箱”(SWT)是 Java 开发者的小窗口工具箱,它提供可移植的 API,并与底层本机 OS GUI 平台紧密集成。

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

可移植性和平台集成

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

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

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

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

与平台的一致性

平台集成严格说来并不是外观问题。紧密集成包含与本机桌面功能部件交互作用(例如拖放),与 OS 桌面应用程序集成,并使用利用 OS 组件模型(例如,Win32 ActiveX)开发的组件的能力。

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

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

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

Copyright IBM Corp. and others 2000,2002.