如何进行 Java GUI 图形用户界面编程
进行 Java GUI(Graphical User Interface,图形用户界面)编程,大家或许经常
徘徊在 SWT/JFACE, Swing, AWT 之间选择,哪一个更合适自己?AWT 作为 Java 语言的
第一个 GUI 类库包,在这三者之间中年龄最长,可谓开国元勋;老二 Swing,兼容
AWT, 同时又对 AWT 进行了改进,可谓站在前辈的肩膀上,自然就会看的远了;老三
SWT/JFace,则只能用不走寻常路来形容它,SWT/JFace 采取了与 AWT 和 Swing 完全
不同的技术路线。这三剑客之间,究竟孰优孰劣,且听下文分解。
1. 穷途末路的 AWT
AWT(Abstract Windowing Toolkit),中文译为抽象窗口工具包,是 Java 提供的
用来建立和设置 Java 的图形用户界面的基本工具。AWT 由 Java 中的 java.awt 包 提供,
里面包含了许多可用来建立与平台无关的图形用户界面(GUI)的类,这些类被称为组件
(components)。
抽象窗口工具包 (Abstract Windowing Toolkit) (AWT)是 Java 的平台独立的窗
口系统, 图形和用户界面器件工具包。AWT 是 Java 基础类 (JFC)的一部分,为 Java 程序
提供图形用户界面(GUI)的标准 API。
AWT 提供了 Java Applet 和 Java Application 中可用的用户图形界面 GUI 中的基本
组件(components)。由于 Java 是一种独立于平的程序设计语言,但 GUI 却往往是 依赖
于特定平台的,Java 采用了相应的技术使得 AWT 能提供给应用程序独立于机器平台的接
口,这保证了同一程序的 GUI 在不同机器上运行具有类似的外观 (不一定完全一致)。
抽象窗口工具包 AWT (Abstract Window Toolkit) 是 API 为 Java 程序提供的建立
图形用户界面 GUI (Graphics User Interface)工具集,AWT 可用于 Java 的 applet 和
applications 中。它支持图形用户界面编程的功能包括: 用户界面组件;事件处理模型;
图形和图像工具,包括形状、颜色和字体类;布局管理器,可以进行灵活的窗口布局而与
特定窗口的尺寸和屏幕分辨率无关;数据传 送类,可以通过本地平台的剪贴板来进行剪切
和粘贴。
然而,Java 推出的时候,AWT 作为 Java 最弱的组件受到不小的批评。最根 本的缺
点是 AWT 在原生的用户界面之上仅提供了一个非常薄的抽象层。例如,生成一个 AWT 的
复选框会导致 AWT 直接调用下层原生例程来生成一个复选框。不 幸的是,一个
Windows 平台上的复选框同 MacOS 平台或者各种 UNIX 风格平台上的复选框并不是那么
相同。这种糟糕的设计选择使得那些拥护 Java “一次编写,到处运行 (write once, run
anywhere)”信条的程序员们过得并不舒畅,因为 AWT 并不能保证他们的应用在各种平
台上表现得有多相似。一个 AWT 应用可能在 Windows 上表 现很好,可是到了
Macintosh 上几乎不能使用,或者正好相反。在 90 年代,程序员中流传着一个笑话:Java
的真正信条是“一次编写,到处测试 (write once, test everywhere)”。导致这种糟糕
局面的一个可能原因据说是 AWT 从概念产生到完成实现只用了一个月。
评论0