首页>参考读物>计算机科学与技术>软件与程序设计

Java动画、图形和极富客户端效果开发
作者 : Chet Haase;Romain Guy
译者 : 蔡黄辉
出版日期 : 2008-05-15
ISBN : 7-111-23841-6
定价 : 49.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 370
开本 : 16开
原书名 : Filthy Rich Clients:Developing Animated and GraphicalEffects for Desktop JAVA Applications
原出版社: Addison-Wesley
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

本书介绍了如何构建更好、更生动和更酷的桌面应用程序来强化用户体验。
图形和动画效果通过更吸引人的GUI和动态效果(例如赋予应用程序一个脉动和保持用户连接到这个应用程序的逻辑流程的动态转换)来提供增强应用程序的用户体验的方式。本书还讨论了如何有效地做到这一点,确保以合理的方式使应用程序变得更丰富。
  
  本书的内容包括:
  ■图形和GUI基本原理:深入研究如何结合使用Swing和Java 2D在界面上显示GUI应用程序。了解如何最大化这些库的灵活性并高效地使用它们。
  ■性能:本书的讨论和提示有助于编写高性能的GUI应用程序。
  ■图像:创建和使用图像来构建更好的Java应用程序。
  ■高级图形:对极富客户端特别有用的Swing和Java 2D的元素。
  ■动画:研究动画的一般概念和如何使用Java平台提供的一些工具。学习如何极大地简化Java中的动画开发的新工具库。
  ■效果:如何创建、定制和使用静态和动态的效果,这是极富客户端的支柱。
  ■代码示例解释了关键概念,而本书的Web站点(http://filthyrichclients.org)有许多演示、工具库和相关技术的补充说明及其他。本书非常适合Java的开发人员构建桌面系统。

图书特色

图书前言

欢迎阅读本书。这是一本关于利用图形和动画效果创建更好、更有效和更酷的桌面应用程序的书。在2006年JavaOne会议上成功举行关于这个主题的会议后,我们开始编写这本书。这个会议研究了使用动画、高级2D效果和一些3D效果创建更丰富的应用程序。但是看起来关于这个主题我们能够讨论几天。理解为什么应该开发这样的应用程序、这些技术如何使它们工作和如何能够适当地开发支持极富客户端的效果,这些真是非常丰富的话题。
  这本书因此诞生。我们在本书中开始讨论Java基本原理、Swing、Java 2D、图形、图形用户界面(GUI)、动画、性能和基于这些基本原理的用于创建漂亮应用程序的高级效果。
  欢迎加入我们。它应该很有趣。
  本书组织
  本书自始至终有一个连续的流程,所以读者需要按照这个顺序阅读,至少需要理解这些内容是如何安排的。本书中有许多适于随机地阅读的代码片断和讨论,但是这些内容后台的技术可能与书中早先的讨论有关。这种关系出现时通常会注明,以便可以更容易地查阅早先的背景资料。
  本书的最初意图是解释我们在本书最后演示的非常酷的效果。但是,据我们所知,还没有解释Swing、图形、Java 2D渲染和动画的背景的图书,而这些内容是理解这些效果如何工作所必须的知识。所以我们从头开始。我们先研究这些领域的基本原理,你逐渐掌握它们,以便阅读到这本书的最后时可以理解所有的内容。 把这种方法看作启蒙的一个常规途径。
  本书不但提供了许多可以用于创建极富客户端的时髦的示例效果,而且提供了它如何工作的所有知识,以便你可以独自继续研究。
  第一部分:图形和图形用户界面基础
  第一部分讲述本书其他部分始终使用的Java图形和用户界面编程的基本概念。图形和用户界面开发的全面描述超出了本书的范围,但是我们在本书中涵盖了足够使每个人熟练掌握API、技术和理解稍后章节中创建这些元素所必须的详细资料。
  如果读者已经完全理解AWT、Java 2D和Swing,那么这一部分开头的内容可能有点老套。然而,当你继续阅读时,将依赖这些基本的概念。而且,本书自始至终有许多有趣的、深奥的技巧,它们应该对所有的桌面Java开发人员都有用。
  第二部分:高级图形渲染
  第二部分讲述Java 2D和Swing中创建极富界面时有用的更多高级主题。第二部分的前半部分讲述特定图形的合成、渐变和图像处理的技术。第二部分的后半部分讲述更多Swing相关的技术:玻璃面板、分层面板和重绘制管理器。
  第三部分:动画
  极富客户端不是静止不动的,它是活的。它需要移动,它需要变化。它需要灵魂以便用户知道它的存在。好看只是成功的一半,成功还需要看起来是活动的。
  第三部分讲述动画的基本原理,动画可以用来为应用程序带来生命。我们讲述动画图形和GUI的一些基础,讨论Java SE核心库中有助于开发动画的现有工具,还讨论Timing Framework库,它使得在Java中开发动画更容易。
  第四部分:效果
  第四部分依赖本书前面讲述的所有内容。效果是极富客户端的核心,它使得极富客户端有别于纯粹的富客户端。效果分为两个类型。第一个类型是静态效果,它为了使应用程序有更丰富的外观而使用了图形技术。第二个类型是使GUI移动的动态的或活动的效果。我们还讨论Animated Transitions,这是另外一个动画效果,可以通过本书的Web站点上可下载的一个工具库激活它。这一部分的最后一章演示了如何开发一个简单的极富客户端,从最初的设计图表一直到各种效果的实现。
  本书写作风格
  我们为本书采用了一个非正式的编写风格,因为我们真地感觉正在和您(读者)交谈。我们两人中的一个经常在本书的段落中用到“我”这个词。这就是区分谁在编写这部分内容的一个技巧。当然,实际上没有关系,而且您可能也不在意。但是万一在意,下面是一个提示:Romain编写的章节中图像和截屏图通常更吸引人,而在Chet编写的章节中有较多的脚注和原始文本。这些区别正好反映了两个人的个性:Romain有很强的审美能力,他可以取得漂亮的图像,而Chet谈的非常多。
  读者需要具备的条件
  有Java语言和Swing的经验将对阅读本书很有帮助。本书不是这些主题的一本初级读物,而是假定读者熟悉Java和Swing。然而,即使对于高级的Swing程序员来说,Swing的一些渲染基础(对于要理解创建极富客户端很重要)可能也不是很容易明白。所以本书的前面几章解释Swing和Java 2D如何相互作用,以便创建我们在本书的其他部分研究的各种定制效果。
  与本书配套的Web资源
  我们已经在Web站点http://filthyrichclients.org上汇集了本书相关的信息。从本书中使用的工具库的演示到关于本书的其他信息和适当的相关技术,这个站点全都有。我们已经确定在本书中肯定没有错误,但如果发生了怪事(书中出现错误),Web站点上勘误表会揭示这些错误。
  Web站点代码
  本书有许多演示代码。在页面中有许多代码片断。大多数情况下,这些代码都是从发布在Web站点上的演示中复制过来的。那个地方还有在本书的Web站点上查询的项目名称。每个演示项目都包含可生成和运行的源代码,通过它们可以看到实际运行的应用程序,也可以把这些代码装配到项目中来使用它们。这些演示不是微不足道的可以忽略的内容,我们希望您到本书的Web站点检查这些演示。我们在编写本书时特别开发了这些相关的演示,Web站点上软件中的内容与书中每一章的内容结合得很好。
  Web站点库
  本书中也使用和讲述了工具库。对于我们开发的一些演示这些库是有用的,但是更重要的是它们可以在项目中用作单独的库。
  可以在其他Web站点上正在开发的项目中获得这些库,如下所示,但是本书的Web站点http://filthyrichclients.org提供的版本与本书中使用的版本相匹配。书中包括下列库:
  Timing Framework:这本书中有两章详细地讲述了这个库(提示:寻找名字用“Timing Framework”开头的章)。这个项目正在由http://timingframework.dev.java.net开发,但是,在本书的Web站点上可以获得与本书中代码和描述相匹配的这个库的特定版本。
  Animated Transitions:本书的结尾(第18章)才讲述这个库,它的名称就是“Animated Transitions”。同样,在java.net上也可以获得这个项目,虽然在编写本书时它还没有发布。但是无论如何,在本书的Web站点上可以获得与书中描述相匹配的版本。
  其他项目
  有许多外面的项目适宜研究寻求极富客户端,但是本书和我们的演示只分别提到和使用一些特殊的项目:
  SwingLabs:本书的演示和摘录上下文中提到的许多工具在SwingLabs的Web站点上都可以获得。一定要在http://swinglabs.dev.java.net上检查这些技术及其他技术。
  JOGL:Java对OpenGL的绑定库为利用OpenGL API及跨Java运行的大多数平台的硬件加速编写3D应用程序和效果提供了一个途径。可以在http://jogl.dev.java.net上找到JOGL。
  其他Web资源
  我们两人都不定期但经常更新我们的博客。通常,当需要知道更多关于图形、性能、Java 2D和Java桌面客户端技术,请访问Chet的技术博客http://weblogs.java.net/blog/chet/。要查看更多令人激动的图像,请在Romain的www.curiouscreature.org英文博客上检查最新的Swing演示和讨论。
  在这两个Web站点上将发现非常重要的信息,这些信息很好地补充了这本书。甚至可能无意地阅读到本书结局的预览。实际上,发布这些条目时,甚至我们自己也不知道会这样。
  如果喜欢阅读本书的一些脚注,请检查Chet的非正式的风趣的博客http://chetchat. blogspot.com。最后,如果您可以读懂法文,请访问Romain的法文博客www.progx.org,它不可思议地把有趣的故事和编程建议结合在一起。

图书序言

这是一本关于创建漂亮应用程序的书。不仅是许多没有特色的标准外观下的文本框和按钮,而且是真的非常漂亮的应用程序。
  很多年前,图形用户界面是由标准的外观规范规定的。采用这种方式是为了尽量集中应用程序中的所有GUI代码,这样可以容易地编写应用程序的文档(每个人都知道滑块是什么,所以不需要描述它)和围绕台式计算机相对较少的图形性能工作。
但是计算机行业与消费者之间最近十几年的碰撞导致在强调用户界面美观方面得到很大的提高:从广为人知的增加复杂系统的易理解性到吸引消费者的引人注目的酷,哪怕仅仅是简单的“哇!”,美学正在进入设计的所有方面。
  把这一点与摩尔定律带给我们的显著增强的计算机能力结合起来,尤其当它表现在商品图形渲染硬件上时,您已经获得广泛的、有趣的设计可能性。
  其中有许多的细微之处,从“怎么创建一个漂亮的界面”和“如何使得像素漂亮”到“如何才能快速地创建它”,本书讲述了所有这些主题及更多。就我而言,这是一种非常快乐的编程任务,我确信它也会给您带来快乐。
  ——James Gosling James Gosling是Sun公司副总裁,Sun公司研究院院士,是Java技术的创始人,以“Java技术之父”而闻名于世。
  ——编辑注

作者简介

Chet Haase;Romain Guy:Chet Haase: Sun Microsystems Java SE组的客户端架构师。他对软件的图形感兴趣,他的大部分时间都花在使用各种图形技术上。Chet在Carleton学院获得数学学士学位,在Oregon大学获得计算机和信息科学硕士学位。
Romain Guy: 他对软件图形和图形用户界面开发感兴趣,而且他已经使用了许多年Java和Swing。他已经作为编程杂志的自由新闻记者好多年,他还是法国大学的Java教师、Sun Microsystems Swing团队的软件工程师和Google的软件工程师。

译者简介

蔡黄辉:暂无简介

译者序

我们都知道用常规的Swing和AWT组件无须设置也可以开发Applet和Java应用程序,但是界面的美观程度却总是差强人意。
  本书一开始介绍了图形和图像的基本原理及性能问题,然后介绍了如何让我们只需要对一些组件进行简单定制就可以取得令人惊讶的效果。
  书中还介绍了如何通过现有的框架轻而易举地开发出一些传统的界面设计工具设计出来的效果(例如渐变、滤色镜、玻璃窗格等)和动画(例如平滑移动、淡入淡出、动态转换等)。最后还介绍了几个可以用来容易地开发出界面极其丰富的应用程序的工具和框架,例如Timing Framework、Animated Transitions等。
这本书由浅入深,从图形和GUI的基本原理到高级的图形渲染,再到动画及效果,最后还举了一个实际的开发项目来阐述如何开发图形极端丰富的应用程序。书中引用了很多的代码示例及插图,在讲解原理的同时结合实际的效果,使人很容易理解。
  本书既适合于对开发Java应用程序感兴趣的新手,也适合有多年应用程序开发经验的程序员。
  由于时间仓促,加上译者水平有限,书中难免有翻译疏漏或不妥之处,还请广大读者和同行不吝指正!
  这里感谢我的妻子沈晓霞,感谢她在我翻译这本书的时候对我提供的支持,她还为这本书的校对提供了很多帮助。
  参加翻译的人员还有:陈品珍、蔡德平、沈斌、张红、王海鹏、蔡红健、张建时、沈晓霞、沈安祥、陈品菊、杨文英、廖倩、陈凯金、陈品琴、王建平、施月平、施磊。

  蔡黄辉
  2008年1月

图书目录

译者序

前言
致谢

引言1

第一部分 图形和图形用户界面基础

第1章 桌面Java图形API:Swing、
AWT和Java 2D7
 1.1 抽象窗口工具包7
1.2 Java 2D8
1.3 Swing8
第2章 Swing渲染基本原理9
 2.1 事件9
2.2 Swing绘制10
 2.2.1 异步重绘请求10
 2.2.2 同步的绘制请求11
2.3 Swing渲染12
 2.3.1 paintComponent()13
 2.3.2 paint()15
 2.3.3 setOpaque()17
2.4 双缓冲17
2.5 线程19
 2.5.1 线程模式20
 2.5.2 定时器和事件派发线程24
 2.5.3 通过SwingWorker轻松使用
线程24
 2.5.4 线程小结27
第3章 Graphics基本原理28
 3.1 Java 2D28
3.2 渲染29
 3.2.1 获取Graphics对象29
 3.2.2 图形状态31
 3.2.3 图形基本元素48
第4章 图像60
 4.1 图像类型60
4.2 BufferedImage62
4.3 图像缩放64
 4.3.1 质量与性能的比较67
 4.3.2 getFasterScaledInstance():更快、
更好地缩放图像的方法73
第5章 性能76
 5.1 使用剪辑76
5.2 兼容图像80
 5.2.1 为什么您应该关心80
 5.2.2 什么是受管图像81
 5.2.3 生成兼容的资源82
5.3 受管图像84
 5.3.1 夺取DataBuffer86
 5.3.2 频繁地渲染到图像88
5.4 中间图像89
 5.4.1 好主意90
 5.4.2 它是如何做的90
 5.4.3 注意事项94
 5.4.4 小结95
5.5 最理想的基本渲染95
5.6 基准96
5.7 命令行标记96
 5.7.1 渲染97
 5.7.2 调试性能99

第二部分 高级图形渲染

第6章 合成101
 6.1 AlphaComposite101
6.2 AlphaComposite的12个规则102
 6.2.1 Clear103
 6.2.2 Dst103
 6.2.3 DstAtop104
 6.2.4 DstIn104
 6.2.5 DstOut104
 6.2.6 DstOver104
 6.2.7 Src105
 6.2.8 SrcAtop105
 6.2.9 SrcIn105
 6.2.10 SrcOut106
 6.2.11 SrcOver106
 6.2.12 Xor106
6.3 创建并设置一个AlphaComposite107
6.4 AlphaComposite的常规用法108
 6.4.1 使用Clear108
 6.4.2 使用SrcOver109
 6.4.3 使用SrcIn110
6.5 AlphaComposite的问题111
6.6 创建自己的合成112
 6.6.1 Add合成113
 6.6.2 实现CompositeContext115
 6.6.3 组合这些像素116
6.7 小结117
第7章 渐变118
 7.1 两停顿线性渐变118
7.2 规则渐变的特效119
7.3 多停顿线性渐变123
7.4 放射状渐变125
7.5 优化渐变127
 7.5.1 缓存这个渐变128
 7.5.2 更巧妙的缓存129
 7.5.3 使用循环渐变的优化129
第8章 图像处理131
 8.1 图像滤色镜131
8.2 用BufferedImageOp处理一个图像132
8.3 AffineTransformOp134
8.4 ColorConvertOp134
8.5 ConvolveOp136
 8.5.1 构造一个内核137
 8.5.2 影响边界138
8.6 LookupOp139
8.7 RescaleOp140
8.8 定制BufferedImageOp142
 8.8.1 基本的滤色镜类142
 8.8.2 着色滤色镜143
8.9 滤色镜性能的一个注意点147
8.10 小结147
第9章 玻璃窗格148
 9.1 在玻璃窗格上绘制149
9.2 屏蔽输入事件152
第10章 分层窗格157
 10.1 使用分层窗格层157
10.2 在单个层中排列组件160
10.3 分层窗格和布局161
10.4 可选的使用布局的JLayeredPane162
第11章 重绘管理器165
 11.1 当Swing变得太聪明时165
11.2 接触RepaintManager166
11.3 基于RepaintManager的反射167
 11.3.1 为反射腾出空位168
 11.3.2 绘制反射170
 11.3.3 一个不智能、但反而更合适的
RepaintManager172
11.4 小结174

第三部分 动  画

第12章 动画基本原理175
 12.1 与时间有关175
12.2 基本概念175
 12.2.1 基于帧的动画175
 12.2.2 帧频177
 12.2.3 基于时间的运动177
12.3 定时182
 12.3.1 “现在是什么时候?”182
 12.3.2 “到时候可以唤醒我吗?”184
 12.3.3 “再次唤醒我,再一次,
再一次”185
12.4 分辨率190
 12.4.1 System.currentTimeMillis()和
System.nanoTime()的分辨率192
 12.4.2 睡眠分辨率194
 12.4.3 定时器分辨率197
 12.4.4 关于分辨率的决定199
12.5 活化Swing应用程序200
 12.5.1 活化图形200
 12.5.2 活化GUI202
12.6 小结209
第13章 平滑移动210
 13.1 背景:为什么我的动画看起来
很差210
13.2 什么因素导致动画停顿及如何使
它们平滑210
 13.2.1 定时(几乎)是一切211
 13.2.2 颜色:差异是什么213
 13.2.3 垂直回描:同步的感觉219
13.3 演示:SmoothMoves222
 13.3.1 创建图形对象222
 13.3.2 运行定时器223
 13.3.3 渲染224
 13.3.4 渲染选项224
13.4 小结227
第14章 Timing Framework:
基本原理228
 14.1 概述228
14.2 核心概念229
 14.2.1 Animator229
 14.2.2 回调231
 14.2.3 周期232
 14.2.4 重复233
 14.2.5 分辨率234
 14.2.6 启动行为234
14.3 内插239
 14.3.1 加速和减速240
 14.3.2 Interpolator243
14.4 小结252
第15章 Timing Framework:
高级特性253
 15.1 触发器253
 15.1.1 概念和用法253
 15.1.2 触发器的超类254
 15.1.3 内建的触发器255
15.2 属性设置器261
 15.2.1 PropertySetter263
 15.2.2 Evaluator266
 15.2.3 KeyFrames268
15.3 小结280

第四部分 效  果

第16章 静态效果281
 16.1 模糊281
 16.1.1 动机281
 16.1.2 简单的模糊283
 16.1.3 高斯模糊285
 16.1.4 性能诀窍288
16.2 反射289
 16.2.1 动机289
 16.2.2 绘制反射290
 16.2.3 模糊的反射290
16.3 阴影291
 16.3.1 动机291
 16.3.2 简单的阴影292
 16.3.3 逼真的阴影293
16.4 高亮294
 16.4.1 动机295
 16.4.2 增亮295
 16.4.3 聚光297
 16.4.4 为了更容易阅读而文本高亮298
16.5 锐化300
 16.5.1 动机300
 16.5.2 简单的锐化301
 16.5.3 非锐化屏蔽303
 16.5.4 锐化一个缩小的图像303
16.6 小结305
第17章 动态效果306
 17.1 运动306
 17.1.1 动机306
 17.1.2 前进、前进、走了308
17.2 淡入淡出310
 17.2.1 动机310
 17.2.2 淡入淡出的策略312
 17.2.3 AlphaComposite淡入淡出312
 17.2.4 颜色淡入淡出313
 17.2.5 交叉淡入淡出314
 17.2.6 容易地生成淡入淡出315
17.3 脉动315
 17.3.1 动机315
 17.3.2 感觉我的脉动316
 17.3.3 自动发光318
 17.3.4 跳动的脉动321
17.4 弹簧323
 17.4.1 动机323
 17.4.2 弹簧热324
17.5 变形327
 17.5.1 动机327
 17.5.2 变形按钮328
17.6 小结331
第18章 Animated Transitions332
 18.1 使应用程序的状态动态延续332
18.2 Animated Transitions库334
 18.2.1 动态的应用程序状态334
 18.2.2 GUI的状态334
 18.2.3 API335
18.3 例子:SearchTransition336
18.4 例子:再看一下SearchTransition:
定制344
18.5 例子:ImageBrowser346
 18.5.1 GUI的结构349
 18.5.2 图像和ImageHolder350
 18.5.3 ScreenTransition35118.6 Animated Transitions的底层原理352
 18.6.1 设置下一个界面——静静地353
 18.6.2 使Layout不起作用——动态
地改变布局353
 18.6.3 使Swing高兴:性能354
18.7 小结354
第19章 一个极富客户端诞生了355
 19.1 Aerith355
 19.1.1 运行Aerith355
 19.1.2 大概的位置356
19.2 在纸上设计工作流程356
19.3 想像图358
19.4 在纸上设计界面359
19.5 实体模型360
19.6 从实体模型到代码361
 19.6.1 使用层361
 19.6.2 混合模式363
 19.6.3 使用导向线364
19.7 我不是画家364
19.8 选择合适的颜色366
19.9 阅读与设计相关的书籍367
19.10 小结367
第20章 结论368
 20.1 项目368
20.2 Java站点369
20.3 作者的站点369
20.4 互相交流370致Kris
我从来没有完全理解书中对夫妻/搭档/家庭的致辞。我的意思是,它看起来像是一件文雅的事,但实际上没有必要。即使在编写我的那些章节时,它看起来也只是我工作的一部分,与家庭生活完全无关。然后我变得疯狂,不停地赶进度、然后回顾并修改这些章节。我基本上从家庭生活中完全消失了三个月。现在,我完成了。
Kris,感谢您对这个项目的支持;感谢您在我不在的时候照顾家庭、孩子和其他;还要感谢您当我再次出现时您仍然在这儿。
——Chet
致我的所有朋友
你们虽然已经听过我对这本书抱怨了许多次,但是仍然愿意听我抱怨。但愿这种事情不再发生。
感谢你们帮助我保持神志清楚。
致Chet
感谢您保持平静和礼貌,即使您急切地想看到我编写的章节。
致我认识的Swing团队
感谢你们信任我并给我提供许多很好的机会。
——Romain

教学资源推荐
作者: 刘振安 刘燕君 唐军 编著
作者: [美] 本贾尼?斯特劳斯特鲁普 (Bjarne Stroustrup)著
作者: (美)Mary Campione Kathy Walrath Alison Huml
参考读物推荐
作者: Steve Cook; Gareth Jones; Stuart Kent Alan Cameron Wills
作者: [美] 戴维?朱利安(David Julian)著
作者: (美)Cary Jensen, Loy Anderson
作者: 闫洪磊 著