引言 1
第1章 桌面Java图形API:Swing、AWT和Java 2D 7
1.1抽象窗口工具包 7
1.2 Java 2D 8
1.3 Swing 8
第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 2D 28
3.2渲染 29
3.2.1获取Graphics对象 29
3.2.2图形状态 31
3.2.3图形基本元素 48
第4章 图像 60
4.1图像类型 60
4.2 BufferedImage 62
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夺取DataBuffer 86
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 AlphaComposite 101
6.2 AlphaComposite的12个规则 102
6.2.1 Clear 103
6.2.2 Dst 103
6.2.3 DstAtop 104
6.2.4 Dstln 104
6.2.5 DstOut 104
6.2.6 DstOver 104
6.2.7 Src 105
6.2.8 SrcAtop 105
6.2.9 Srcln 105
6.2.10 SrcOut 106
6.2.11 SrcOver 106
6.2.12 Xor 106
6.3创建并设置一个AlphaComposite 107
6.4 AlphaComposite的常规用法 108
6.4.1使用Clear 108
6.4.2使用SrcOver 109
6.4.3使用Srcln 110
6.5 AlphaComposite的问题 111
6.6创建自己的合成 112
6.6.1 Add合成 113
6.6.2实现CompositeContext 115
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用BufferedlmageOp处理一个图像 132
8.3 AffineTransformnOp 134
8.4 ColorConvemOp 134
8.5 ConvolveOp 136
8.5.1构造一个内核 137
8.5.2影响边界 138
8.6 LookupOp 139
8.7 RescaleOp 140
8.8定制BufferedlmageOp 142
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可选的使用布局的JLayeredPane 162
第11章 重绘管理器 165
11.1当Swing变得太聪明时 165
11.2接触RepaintManager 166
11.3基于RepaintManager的反射 167
11.3.1为反射腾出空位 168
11.3.2绘制反射 170
11.3.3一个不智能、但反而更合适的 RepaintManager 172
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活化GUI 202
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演示:SmoothMoves 222
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 Animator 229
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 Interpolator 243
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 Property Setter 263
15.2.2 Evaluator 266
15.2.3 KeyFrames 268
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 Transitions 332
18.1使应用程序的状态动态延续 332
18.2 Animated Transitions库 334
18.2.1动态的应用程序状态 334
18.2.2 GUI的状态 334
18.2.3 API 335
18.3例子:SearchTransition 336
18.4例子:再看一下SearchTransition定制 344
18.5例子:ImageBrowser 346
18.5.1 GUI的结构 349
18.5.2图像和ImageHolder 350
18.5.3 ScreenTransition 351
18.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 Aerith 355
19.1.1运行Aerith 355
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