1.1 Java GUI技术概述
1.1.1 AWT技术
抽象窗口工具包(Abstract Windowing Toolkit,AWT)是1995年随着Java的第一个版本推出的图形用户界面开发包。AWT可以用于构建运行于浏览器中的Java Applet和Java桌面应用的图形用户界面。AWT技术的设计也遵循Java技术的“一次编写,到处运行”的特性。然而,AWT并没有像Java技术本身那样一开始就受到青睐,而因为其自身的缺陷和功能弱未能被广泛应用。
AWT体系采用了对等设计模式,即通过Java虚拟机和Windows GDI的接口(以Windows为例子)将awt控件直接对应到运行平台上的一个类似或者等同控件上。这样awt首先需要经过通用的Java技术来控制图形、事件等,然后Java虚拟机再将请求传送到具体的平台图形和控件接口去交互。对等模式技术的应用使得AWT工具集必须使用所有图形操作系统的图形接口功能的交集,即所有系统都能够支持的最少特性。AWT的实现机制如图1.1所示。
图1.1 AWT组件实现机制
AWT组件的实现机制直接导致了AWT组件存在组件少而缺乏特性,在很大程度上制约了Java在桌面系统方面的应用。事实上,AWT技术并未真正流行过,也早已成为历史。
1.1.2 Java GUI技术的里程碑——Swing技术
Swing技术是1998年发布的JFC的一部分,是一个以AWT为基础,但进行了巨大改进的Java GUI开发包。应该说Swing开发包的推出是Java GUI发展过程中的一个里程碑。相比AWT技术,Swing技术有很多的优势,主要体现在下面几个方面。
(1)采用了新的组件实现机制。除了顶层容器外,Swing采用了一种不依赖平台的实现方法,即完全使用Java实现相关组件,组件丰富且使用灵活,不受平台限制,因此,通常称Swing为轻量级组件。实现机制如图1.2所示。
图1.2 Swing组件实现机制
(2)支持可更换的Look And Feel(观感与主题),即可以更换界面“皮肤”。Swing组件的实现机制,使得使用Swing组件开发的图形界面具有可更改默认界面显示外观的特性,可以动态地改变界面外观。事实上,除了Swing开发包中提供的Metal、Motif与Windows界面样式外,还可以使用第三方开发的界面外观样式,也可以自己开发个性化的外观样式。
(3)Swing组件的设计中大量使用了MVC设计模式。这种设计方式大大提高了Swing的灵活性,但同时也增加了组件使用的难度。
Swing相比AWT的优势是显而易见的,但最终仍然没能使Java成为构建桌面应用程序的优秀工具。究其原因,主要由两个方面造成的。
(1)Swing组件轻量级的设计方式,导致执行速度较慢,使Swing应用程序整体感觉比本地应用程序响应慢。
(2)Swing功能强大,但过于复杂。使用Swing能开发出很好的程序界面,但需要开发者技术精湛,能很好地理解Swing组件体系。
1.1.3 Eclipse平台与Swt/Jface技术
Eclipse是一个最早由IBM开发的基于Java的可扩展开发平台,后被IBM捐赠出来,成为一个备受欢迎的开放源代码工具。Eclipse的核心由一个开放式的框架和一些服务构成。开发人员可以通过插件机制根据需要灵活构建自己需要的开发环境。Eclipse的平台体系如图1.3所示。
图1.3 Eclipse的平台体系结构
1.平台
平台(Platform)运行时环境(Platform run-time)是Eclipse的内核,它的主要任务是在Eclipse启动时检查已安装了哪些插件,并创建关于它们的注册表信息。除内核外,Eclipse的其他特性都是作为插件加载来实现的。
2.工作台
工作台(Workbench)是Eclipse提供给用户使用的工作界面,Eclipse的工作台是使用Swt/Jface构建的。
3.工作区
工作区(Workspace)是指用户开发项目时的存储和管理资源的工具,用户资源包括用户创建的项目和项目中的其他文件资源等。如果其管理的资源信息发生变更,工作区会通知其他插件。
4.团队支持
团队支持功能负责提供版本控制盒配置管理支持。它根据需要添加视图,以允许用户与所使用的任何版本控制系统交互。
5.帮助
为了与Eclipse插件功能特性相适应,Eclipse的帮助系统提供一个附件的导航结构,允许以HTML文件的形式添加文档,具有与Eclipse平台本身相当的可扩展能力。
6.默认插件
Eclipse基本平台默认提供了Java开发工具集JDT和插件开发环境PDE。JDT提供了开发Java程序所需的功能和工具,PDE则为开发Eclipse的插件提供了环境支持。
Swt(Standard Widget Toolkit)是来自IBM Eclipse开源项目的一个标准窗口部件库。Swt在Eclipse平台中扮演了一种极其重要的作用并成为Eclipse项目中的一个亮点。Eclipse工具的界面本身是基于Swt/Jface技术开发的,是Swt/Jface技术应用的一个经典案例。
无疑,Swt/Jface在Eclipse中的优异表现将Java GUI推进到了一个新的阶段。采用Swt/Jface技术能开发出基于Java的高效的专业化的界面。Swt/Jface之所以有如此好的表现,主要是因为Swt的实现机制吸收了AWT和Swing的优点。首先,Swt的设计采用了“最小公倍数”原则,提供了不同操作系统平台上包含的组件的并集。在实现上,遵循的原则为:如果操作系统平台中有该组件,Swt就包装并通过JNI技术直接调用它;反之,就使用Java直接进行绘制来模拟该组件。Swt组件的实现机制如图1.4所示。
图1.4 Swt组件实现机制
Jface是基于Swt组件,采用MVC模式对组件进行了封装而形成的一个新的类库。该类库中包含一些高级控件,大大简化了采用Swt开发Java图形用户界面的难度,提高了开发效率。
通常,我们在Eclipse平台中采用Swt/Jface开发Java GUI应用程序时,会安装一个可视化开发插件来简化程序图形用户界面的开发。目前最为流行的是WindowBuilder(前身为Swt Designer)可视化插件。本书采用WindowBuilder作为Swt/Jface的可视化开发工具,书中所有程序的界面均采用WindowBuilder完成开发。