没有合适的资源?快使用搜索试试~ 我知道了~
首页eclipse 开发桌面程序
eclipse 开发桌面程序
需积分: 48 719 浏览量
更新于2023-05-31
评论
收藏 3.65MB DOCX 举报
利用SWT技术,基于WindowBuilder Eclipse 插件开发 桌面应用小程序详细步骤
资源详情
资源评论
资源推荐

1. SWT 介绍
1.1. SWT 与 Sun AWT、Swing 比较
SWT(Standard Widget Toolkit) 是目前 Java 世界中最知名的三大 GUI(Graphical
User Interface,图形用户接口)之一。其余两个是 Sun 的 AWT(Abstract Windowing
Toolkit) 和 Swing 。 它 是 一 个 开源 的 GUI 编 程 框 架, 来 自 IBM Eclipse 开 源 项目 的
SWT(Standard Widget Toolkit)标准窗口部件库,不包含于 JDK 中,需要从 Eclipse
单独下载,著名的开源 IDE-eclipse 就是用 SWT 开发的。 在 SWT 之前,Sun 已经提供
了一个跨平台 GUI 开发工具包 AWT (Abstract Windowing Toolkit)。它包含于所有的
Java SDK 中,底层使用原生窗口部件(native widgets)构建,只能使用各个平台窗口部
件的子集。Swing 是 AWT 的高级图形库,包含于 Java2 SDK 中。下面对三者进行详细介
绍:
AWT 的原理:小巧却简陋的 GUI 系统
AWT 出现于 Java 1.x 中,是 Java 初期所内置的一种面向窗口应用的库。AWT 使用的技
术是对等设计模式(即 Peer),其结构关系参见下图。
从这幅类关系图很容易看出 AWT 的技术实现和 Peer 设计模式。图中,黄色的类是
java.awt 包中的类,浅灰色部分是 Java 虚拟机部分,而深灰色则是 Windows 平台。
AWT 的重点是对等 Peer 设计模式。所谓 Peer 对等设计模式就是将 AWT 控件直接对应到
运行平台上的一个类似或者等同控件上。比如图中的 Button 类就是对应了深灰色的
Windows 的标准 Button 功能。
对等模式用于在两个控件间之间建立一个相互作用的联系,而充当纽带的则是 Java 虚拟机
和虚拟机-GDI 的接口(以 Windows 为例子)。所以,我们可以看出,AWT 首先需要经
过通用的 Java 技术来控制图形、事件等,然后 Java 虚拟机再将请求传送到具体的平台图
形和控件接口去交互。
对等模式的效率并不很高,因为 AWT 通过了虚拟机和虚拟机-GDI 这两个层次来完成一

个操作,经过的层次系统越多,速度和效率就越慢。而且 Peer 对等模式有一个致命的弱
点:移植性非常差!
这就是 Sun 为什么要用 Swing 来诱惑我们离开 AWT 的主要原因。因为既然是对等模式,
那么 AWT 就必须使用所有图形操作系统的图形接口功能的交集,因为 AWT 的接口只有一
套,所以,为了保证移植性,就只能使用所有系统都能够支持的最少特性。因而我们经常
可以听见有人抱怨 AWT 的功能太少,图形太难看等等,这是为了保证移植性而作出的牺
牲。
猛犸巨兽的诞生-Swing
从 Java2 即 Java 1.2 版本开始,Sun 开始在 JDK 中提供一套新的图形界面接口系统-
Swing。所有 Java 爱好者都投入了对 Swing 的研究和迷恋。随着一大批使用 Swing 作为
界面技术的 IDE 和程序出现,很快大家都意识到 Swing 的问题所在。
一些人认为 Swing 是轻量级的 GUI 系统,无论官方如何说,没有一个 Java 程序员会认为
Swing 是轻量级的,相反,Swing 是一个非常巨大的 GUI 库,这一点已经是 Java 界的共
识。
Swing 的一些底层类是借用了 AWT 的 Component、Container、Window 等少数几个
基础类。估计的原因是为了保持与 AWT 的兼容,方便大家将代码移植到 Swing 上。
下面是 Swing 的类关系图:
菊黄色类为 Swing 包的类。对比一下 Swing 的图与 AWT 的图,我们可以发现,Swing
图中,awt 体系中的深灰色 Windows 控件类已经被去掉了。因为 Swing 不再沿用 Peer
对等模式来实现 GUI 界面。
这是 Swing 的核心思想之一,Swing 是完全基于 Java 自绘制图形而实现的,因而 Swing
的界面看起来与 Windows 不再有任何类似,尤其是窗口控件的样式(虽然我们也可以通
过换肤来达到模拟 Windows 界面的效果)。
所以上图清楚的表明了 Swing 是一个高层的 GUI 系统,而不像 AWT 那样与运行平台技术
更加靠近的系统。我们仍然用 Button 与 Panel 来做了一个例子,图中关系看出,Swing
的 类 继 承 关 系 比 AWT 要 复 杂 的 多 , 而 且 Swing 类 大 多 都 经 过 了 中 间 的 转 接 类 -
JComponent。而我们常用的 JFrame 则另辟蹊径,从 awt 的 window 继承了下来。
这种结构关系决定了 Swing 的庞大与复杂性。很多初学者都难以理解 Swing 的模式和结

构。
Swing 中的控件都是利用 Java 图形功能绘制出来的,而不是对应到平台的一个具体控件
实现。我们所用的所有 Swing 控件都是直接或者间接用 Graphics 绘制出来的,这种实现
方式最大的好处是很灵活,我们想要什么样的控件,就直接用 Graphics 绘制出来就是了。
Sun 之所以用这种方式来实现,是为了在不牺牲移植性的基础上加入丰富的界面交互功能。
但是缺点也很明显:Swing 的速度和效率是所有 GUI 系统中最慢的。
JBuilder 和 NetBeans 的 IDE 都是纯正的 Swing 界面,启动一下,然后操作一下,比如
拖动窗口之类的试试,你就会明白我在说什么。
之所以导致这个结果,其原因是:
1、Swing 的类层次太深,一个 JFrame 经过了 4 层的类继承关系,如果再加上虚拟机的
图形功能内部实现,就有 6 层的转接关系,每一次的继承和转接都会消耗系统资源和速度
损失。(过多的继承会降低系统的速度,因为操作子类往往是使用基类指向来完成通用操
作的)
2、Swing 是基于自绘制图形技术的,而 Java 为了保持可移植性,所以无法使用硬件加速
和平台特性来加快图形操作的速度。因而 Java 的图形技术都是“高层”的图形技术,就好像
我们用 Windows GDI 去做动画一样,当然速度会很慢。
新的曙光-SWT
应该说,稍有阅历的 Java 的程序员都知道很多人对 Swing 效率低下的抱怨。IBM 赞助的
Eclipse 开放源码项目,搞了一个另类的 GUI 系统-SWT。SWT 是一个非常独特的技术,其
核心思想和 Windows 上的 DirectX 如出一辙,也许 SWT 的程序员真的是借鉴了 DirectX 成功
的秘诀。下面是 SWT 技术原理的类关系图:
我们会看见,SWT 的类关系非常直接而且易懂。最重要的一点就是 SWT 的核心思想:
SWT 的功能实现是完全构筑在以 JNI 为基础的,对运行平台的直接调用封装上的。
我们可以从图中看见,SWT 的功能没有通过任何 Java 虚拟机来操作,而是直接调用
Windows GDI 和 Shell 功能,这一点是通过 JNI 方法调用完成。
一定会有人说 SWT 破坏了 java 的移植思想,不过 Eclipse 的大范围流行,正好证明了
SWT 非但没有阻碍移植性,反而提高了各种操作系统对于 Java GUI 的利用和期待。这不
能不说 Eclipse 项目组是充满智慧的。
在 Eclipse 下,plugin 目录的 swt 目录下,你可以发现一个 dll 动态库文件,这个 dll 就是
JNI 方法调用库。
基于 SWT 技术实现的 Eclipse 界面不但速度很快,效率很高,而且比 Swing 要美观的多。
这就是直接调用封装的效果

1.2. SWT 结构
由于 SWT 使用了一种新的模型来完成窗口部件的创建,将 SWT 的功能实现完全构筑在以
JNI 为基础,对运行平台的直接调用封装上。它提供了与平台无关的 API,该 API 与操作系
统的本机窗口环境紧密集成在一起。该工具箱使开发人员不必面对在使用 Java 的抽象窗口
工具箱(AWT)或 Java 基础类时在许多设计和实现方面索要做的平衡。SWT 的结构如下图
所示:
1.3. SWT 支持的操作系统
SWT 的功能没有通过任何 Java 虚拟机来操作,而是直接调用 Windows GDI 和 Shell 功能。这
一点是通过 JNI 方法调用完成。这样做最大的好处是,可以使得开发出来的应用具备本地
操作系统的外观和特性,甚至包括 Pocket PC。只有在当前操作系统中找不到需要的部件时,
SWT 才会自己绘制图形,这样可以显著提升应用的响应速度。这样做的缺点就是 SWT 必须
为每一种从操作系统准备一套本地函数库,这一点不像 Swing 那样灵活。不过目前 SWT 支
持的操作系统已经覆盖了常见的几种,如下图所示:

1.4. SWT 的优势和不足
综上所述,SWT 的优势在于:
1) 简单使用的 API 可以使开发人员快速上手;
2) 由于本地的 JNI 调用机制,SWT 应用运行速度快;
3) 可以仿造本地操作系统风格画出本地操作系统中没有的部件;
SWT 的不足在于:
1) 每一种操作系统都需要有匹配的 JNI 程序供 SWT 调用,没有 Swing 那样灵活(不过
基本操作系统也已经覆盖)
总的来说,如果需要利用 java 语言面向对象、跨平台等种种优势,同时又希望创建一套和
本地操作系统风格兼容的 GUI 应用,那么 SWT 应该是首选。
1.5. SWT 的扩展-JFace
JFace 本质是基于 SWT 编写的一组 API,它基于 SWT 开发,也是 SWT 的扩展。 JFace
与 SWT 的关系好比 Microsoft 的 MFC 与 SDK 的关系。其 API 比 SWT 更加易用,但功能
却没有 SWT 来的直接。例如,下面的代码应用 JFace 中的 MessageDialog 打开一个警
告对话框:MessageDialog.openWarning(parent,"警告","警告消息");如果只是使用
SWT 完成以上功能,语句不会少于 30 行!所以对于开发人员来说,在开发一个图形构件
时,比较好的方式是先去到 JFace 包中找一找,看看是不是有更简洁的实现方法,如果没
有再用 SWT 包去自己实现。
应用 JFace 中的首选项包中的类很容易为自己的软件做一个很专业的配置对话框。对于
Tree,Table 等图形构件,它们的显示同时也要和数据关联。例如一个 Table 中显示的数据,
在 JFace 中的 View 包中为此构件提供了 MVC 方式的编程方式,这种方法使得显示和数据
剩余51页未读,继续阅读





















niuniuneu
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助

会员权益专享
安全验证
文档复制为VIP权益,开通VIP直接复制

评论0