没有合适的资源?快使用搜索试试~ 我知道了~
首页swt/jface in action中文版
资源详情
资源评论
资源推荐
1
第一章 SWT 和 JFace 概览_1
本章涵盖内容
■ SWT 和 JFace 的目的
■ 它们形成的理由
■ 这两个类库如何区别于 Swing
■ 许可证和平台支持
在 2004 年三月,Java 开发者年度大会宣布了由其读者选择的最佳 Java 组件年度奖结果,超过 15,000 位开
发者投票选举诸多 Java 工具套件(当然包括不少声名显赫的供应商如 Oracle 和 Apple 等)之一。但最终,
Eclipse 的标准小部件工具套件轻易地击败诸多强手,如同其在 2003 年一样赢得了年度最佳。
虽然 Eclipse 是 Java 开发领域的迟到者,但其同样在 JavaWorld, JavaPro 和 LinuxWorld 社区获得了荣耀。
一路而来如潮的掌声和好评彰显了 Eclipse 对于 Java 开发的巨大冲击和影响。在过去的每一天,全球的 Java
开发者们不断被 SWT 和 JFace 强劲的功能和部署新插件和独立应用程序的能力所折服。
本书的主旨就是在于向你展示这一功能套件的功效和你如何将其应用于你现成的项目之中去。需要指出的
是:
■ 开发基于 SWT/JFace 的应用程序
■ 用 SWT 内置的图形语义环境生成定制化图形
■ 理解 SWT 和 JFace 后面的结构和方法论
■ 开阔你的 GUI 设计的知识面
■ 构建和部署 Eclipse 的 SWT 和 JFace 应用程序或独立应用程序
最重要的是 GUI 开发应当是一项充满乐趣的工作!没有一个编程工作能给你这样子的快感。因此,我们将
SWT 和 JFace 的理论用实例代码贯穿始终来显示 GUI 开发实践。但在开始之前,我们需要向您简要阐明该技
术是什么和它能帮你作什么。
1.1 什么是 SWT/JFace?
虽然我们都知道 SWT 和 JFace 是工具(套件),但更科学地讲它们是软件类库。它们由包含 java 类和接口
的文件包组成。但又是什么使得这些组件能让你任意组合 GUI 呢?你的应用程序可以快速运行,高效运用计
算机内存并有着和操作系统界面相同的界面体验,没有其他的 GUI 构建体系可以如此。虽然 SWT 和 JFace 实
现了相同的功能,但它们产生用户界面的机理却是迥然不同的。
我们试图通过汽车驱动机理来类比这一情况:SWT 开发就像标准的汽车驱动模式,它给了你更多的控制权力,
并有机会接触系统内部的东西,但是其使用是相当复杂的;而 JFace 情况下,就像是汽车的自动驱动模式,
你不必深入太多,但是你丧失了灵活性。当然,实际情况肯定比这个比喻要更为复杂。所以我们需要更进一
2
步的讨论这两个类库。
1.1.1 用 SWT 构建 GUIs
每一个操作系统都会有大量的图形组件来构成其默认的用户界面。这一些包括有:按钮、窗口、菜单以及诸
如此类。SWT 的目标就是给予你直接获得这些组件的途径,然后如你所愿地将它们定位和设置。你不必担心
最终用户的操作系统如何,当你在应用程序中加入一个按钮,它就会在 Windows 中表现得如同 Windows 得按
钮,在 Mac 中如 Mac 的按钮,当然在 Linux 中亦是如此。用户会认为你这是为他们的机器定制,而他们并不
清楚事实上你仅用 SWT 写了一遍代码。
除了图形组件,SWT 还提供事件处理,这意味着你可以追踪你的用户按下了哪个按钮或是选择了哪个菜单项
目。这一强劲的功能使得对用户任意形式输入产生反应成为可能。接下来我们会花大量篇幅来演示这是如何
运作的。
最后,如你想在你的应用程序中加入图形,SWT 提供大量的工具来产生图形,处理新字体或是绘制形状。这
些图形可以使得你不尽可以构建图形,还可以让你控制图形何时、何地和如何地在你的 GUI 中显现。本书会
向你演示 SWT 如何管理颜色、绘图、字体、图案,并贡献了大量的实例代码。
SWT 提供了构建用户界面的巨大能力,但是将如你在本书中所见,代码将会变 得冗长而且复杂。正因如此,
Eclipse 的设计者推出了 GUI 开发的第二个类库:JFace。
1.1.2 用 JFace 来简化 GUI 开发
为避免一遍遍地使用 SWT 来写重复的代码,Eclipse 的设计者用 Eclipse 工作台产生了 JFace。这个类库提
供大量的快捷方式以削减因单独使用 SWT 而大量耗费的时间,但另一方面,JFace 不能完全取代 SWT,许多
GUI 的开发还需要两个套件的特性。
Jface 高效的一个例证就是其事件处理。在许多用户界面中,你或许要处理诸多不同的事件,如:点击按钮、
敲击键盘或者菜单项选择,而事实上如上事件都在实现同一功能,在此情况下,SWT 的处理方式是需要对每
一个事件单独安排接受和处理过程;而在 JFace 中允许你将他们组合成一个单一对象,这样你可以集中精力
于如何应对事件(对象)的处理,而不必理睬事件是如何激发的。这一简单但强力的概念使得你可以在你的
GUI 中加入菜单、工具条或甚至是调色板而不需加入一大堆代码。
Jface 另一个有助益的地方就是当你在构建大型的多窗口、多图形的 GUI 时,它可以通过其特有的注册类来
帮你组织 SWT 部件和管理内存开销。举个例子,在 SWT 中,你需要把你应用程序中的字体和位图的生成和分
布要予以说明;而在 JFace 中,你大可使用其内置的 FontRegistry 和 ImageRegistry 对象来处理这些乏味
的问题。
现在你应该基本理解了这两个类库的特性,接下来我们要更进一步以阐明它们的一些设计概念。
我们将快速浏览如下这些论题:它们是如何在操作系统中表现的,初始产生又是如何的等等。
1.2 揭开其面纱
在用户街面上添加组件、事件和图形并不是新鲜玩意儿了,然而 SWT 和 JFace 何以会激起千层浪呢?在这里
3
你需要理解设计者的孤心苦诣了。而这又要牵涉到深层次的 Java GUI 开发的原则问题以及如何使用这些类
库等等。而在我们深入探讨 SWT/JFace 和 JFace 之前,我们还是有必要介绍一下 Swing。SWT 和 JFace 的产
生也正是 Swing 类库(的不争气)而产生,通过比照这 Swing 和 SWT 两个类库的涉及哲学,你会更折服与
SWT 和 JFace 的运行机制;通过这些,你或许也会加入到 Java 开发的 Swing 和 SWT/JFace 两大阵营日益白
热化的争论之中。
1.2.1 Swing:老的替代品
当 sun 在 1998 年发布 Swing 类库时,Java 开发阵营相当的欢欣鼓舞。因为最终 Sun 能够以这一工具套件的
平台无关的特性来实践其“编写一次,到处运行”的信条了。Swing 也成为之后 Java GUI 开发的最为流行
的工具。
但随着时间的推移,许多开发人员又失望了:Sun 在造就 Swing 迷人特性的同时,也使得程序开发日见复杂,
运行效率日益低下。正因如此,很少有看到成功的 Java GUI 开发的桌面应用。
Swing 的渲染
为了确保界面在跨平台是能保持一致,Swing 对用户界面的每一个细节的渲染进行完全控制,也就是 Java
虚拟机指令到其组件的每一个象素和具体行为。虽然 Swing 也同底层平台保持通信,但是却不使用操作系统
任何已内置的对象,即其白手起家,创建每一个对象。因为这些组件都运行于较高层次,它们被引喻为轻量
级组件。这些组件在任何 Java 支持的平台上表现一致。
但是这种方式是有缺陷的,因为 JVM 要管理细化到 GUI 的每一个细节表现和行为,相对于直接依于操作系统
的应用程序运行就十分缓慢了。而用户来说,他们绝大多数都偏好于操作系统的界面特性。
Swing 的自动垃圾回收机制
为了确保 Java 的可靠性运算保证,Swing 沿用了 Java 的自动垃圾回收机制——AGC。这产生了一个威胁和
隐患,因为在应用程序层面上,对于对象的内存分配起始 已经不需要了。在程序独立于开发人员而运行时
AGC 被激发,其一个重要的能力就是如果程序员不释放他们的数据,其他程序就无法为其对象调用这块内存。
AGC 的一个好处就是开发人员只需关注编程而不必关心每一个对象的生命周期,而另一方面,内存分配基制
是你无从知晓它会何时发生,另外 AGC 的能力也会因 JVM 身处的操作系统平台的不同而不同。因此,由于大
型应用程序内对象产生和丢弃的时效特性,程序的表现在各个不同系统内就无规律可循了。
Swing 的设计架构
Swing 通过 MVC 模式来指导 GUI 设计进程。MVC 将用户接口组件分解为三块:状态信息、显示和对外界事件
的反应能力,就是俗称的模型、视图和控制。Swing 的设计者修改了这一方法论并产生了模型代理架构,如
图 1.2。这一架构整合了部件的视图和控制部分成为一个 UI 代理模块。所以对于每一个单独的用户界面组
件如按钮、框架、和 label-Swing 分配内存均包含这组件状态信息和 UI 代理,也即其既控制着表征和事件
反应。
通过将模型信息从表征分离出来,Swing 提供了一个编程方法论,它确保了灵活、可重用编程。但这一能力
对于每一个部件都产生了多个对象。当 GUI 变得复杂是,这一额外的分派和丢弃做法会对处理器产生巨大的
4
负担。
第一章 SWT 和 JFace 概览_2
1.2.2 新贵:SWT/JFace
Eclipse 的设计者注意到了 Swing 的灵活性和其执行问题。他们想要一个套件可以确保 Java 的用户可以象
使用操作系统一样运行一个桌面程序。在实际上,他们是如此之迫切需要,以至于他们编制了他们自己的类
库:SWT 和 JFace。
无论 Swing 和 SWT/JFace 都会产生一个基于 Java 的平台无关的 GUI,但他们的实现方法又是迥异的。
SWT 和 JFace 的最显著的特征是其介入了直接调取操作系统,使用底层平台的重量级组件,而不是自己重
建。这一决策使得 SWT 和 JFace 的表征和运行速度接近于地层平台,在下一章我们会就此展开更为深入的
讨论。当然在此的短暂描述也是有所裨益的。
由于当初 Java 的初创者一开始就意识到 Java 应用程序最总会需要使用到传统代码或是操作系统,所以他
们提供了从 Java 类内部去调取其他语言(如 C 或 Fortran)调取过程的类库。
SWT/JFace 依靠 JNI 来管理操作系统的渲染而不是由其自己来实施。
SWT/JFace 的资源管理
SWT/JFace 的另一个重要特性就是其不依赖于垃圾自动回收机制。一开始,这很容易让人以为这会产生错
误代码。然而,你只需在接触到操作系统资源是加以小心,一般不会出现重大问题。Eclipse 决定将 AGC
从 SWT/JFace 中移走主要有两方面的原因:
■ 内存自动分配的过程在程序运行时是不可预测的,没有任何征兆说明资源何时被释放(可得),当处于
分配过程中时,如果异常情况发生,则过程就可能无法关闭。如果你仅是在处理一些简单数据结构时,可能
这是小事一件。但,如果是在处理一些大型的图形程序时,内存的分配和回收就是不得不要小心谨慎对待的
重大问题了。
■ 对操作系统资源使用 AGC 是困难的,由于 Swing 在高端层次建立了其轻量级的组件,所以这还不成为
一个问题。然而,如果在低端层次如 SWT 小部件同样去使用自动回收机制,那么在跨平台环境下错误的易
发性和不确定性将会是个灾难。如果要花费太多的时间去清理对象,那么内存泄漏问题就会拖垮程序;或者
如果这些资源是以一种错误的方式来释放资源的,那么整个操作系统也要跟着倒霉(宕机)了。
为了预防此类与对象自动回收机制相关联的错误的发生, SWT/JFace 让你自己来自主决定何时释放资源。
这一工具套件通过其组件类中内置的 dispose()方法来简化这一处理过程。同时,一旦你释放了某一父(上
级)资源,其子(下级)资源也会被自动释放。
在以后的章节中,你将看到这意味着在大部分的应用程序中几乎不需要直接的内存释放的必要。你也可以以
半自动方式来调取 SWT/JFace 来管理内存。
5
设计和开发的简化
在 swing 中 GUI 是以模型代理架构产生的,由此会对 GUI 的每一个组件产生不同的对象以表征其不同的
特性。但这一复杂方法不是任何情况下都适用。对于那些刚开始起步学习构建按钮、标签的新手来说不需要
如此复杂。而在其他的极端情况下,程序员在构建复杂的图形编辑器和计算机辅助设计工具是,需要与 GUI
功能更多地分离,以取得不同的试图和设计模式。?
SWT 和 JFace 对其组件的设计架构没有强加任何规则,这意味着你可以随心所欲地极端复杂化地或是极端
简化地构筑你的 GUIs。因为 Eclipse 极易扩展,同时其源代码又是开放的,你可以随你所愿地添加工具或
作修改。事实上,已经有大量的插件为 SWT 和 JFace 组件的 MVC 封装而开发出来了。
1.2.3 SWT/Swing 之争
随意在网上搜索一下 SWT 和 Sw ing,都会看到关于这两者孰优孰劣的热烈争论。这一论战是毫无必要也是
没有实际意义的。SWT 是作为 Swing 之外的另一选择而产生的,而不是为了去替代 Sw ing。我们撰写本
节的目的并不在于褒扬某一工具较另一工具有优势,而是为了解释说明如何运作,为何运作的一种机理。在
Java 开发者中的这种争斗只会伤害到为构建自由的平台无关的应用程序的热忱。这世界给予了 SWT 和
Swing 同样广阔的天地,我们希望这两大阵营求同存异,共创 Java 社区的大同世界。
1.3 SWT/JFace 的许可证和支持平台
在正是开始编写代码之前,我们很乐意谈及 SWT 和 JFace 开发应用程序的两个要点:第一、如同在通用公
共许可协议中概要的那样,Eclipse 和其开发库的条件(?)太缺乏,当你在考虑开发商业应用程序时很重
要;第二、需要关注 Eclipse 和 SWT/JFace 当前所支持的平台。
1.3.1 CPL 通用许可协议
Eclipse 软件基金会是在 CPL 框架下向公众发布 Eclipse 的。这一许可协议和开放源代码组织的许可协议方
案是完全兼容的,并且通过授权免特许权使用费的代码允许作完全的商业使用并可以在全球范围内再发布。
这意味着任何人可以使用源代码,修改源代码并且销售其最终产品。
虽然某些平台部件是在特殊许可条件下发布的,但是由于整个 SWT 和 JFace 是在 CPL 框架范围内的,所
以这使得在全部可支持平台内开发商业 SWT 和 JFace 应用程序成为了可能。
1.3.2 支持平台
在撰写本书时,在不少平台上都已经开始支持 SWT 和 JFace 开发了。因为其依赖于特殊的窗体功能,因此
在某些平台需要多个 SWT 应用实施。表 1.1 列举了支持 SWT 和 JFace 的操作系统和用户界面。
在 linux 操作系统中,尚不能支持 KDE,然而但是如果在 KDE 系统内安装有 GT K 的运行库,那么
SWT/JFace 应用程序同样可以运行在 KDE 桌面。由于 KDE 是构建在 Trolltech Qt 套件基础之上的,而
Qt 套件的发布许可协议比 CPL 有着更多的限制。如果在将来开发了一个 KDE 版本的 SWT 类库,那么现
存的所有的 SWT/JFace 应用程序就可以支持它,并继承获得 KDE 的原生的外观。
SWT 还有一个秘密武器就是其对微软 Pocket PC 2002 系统的支持。SWT 发行版提供了对于基于
StrongARM 体系处理器的 Pocket PC 2002 和 Smartphone 2002 设备的支持。正是由于 SWT 的极大
剩余248页未读,继续阅读
leegongbo
- 粉丝: 4
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论1