版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
java学习脚印:深入java绘图机制
写在前面
对于平常的绘图来讲,java绘图机制无需了解太多,但是朦胧容易产生错误,绘图操作包括了整个GUI的显示问题,遂花了一些时间来学习、整理下,本文主要基于[1][2]以及自我实践加工而成(如有错误,请纠正我)。这里所讲的很多技术可能已经过时了,你可以略过这些部分,但是像下面关键概念以及绘图指导意见部分还是应该掌握。
1.javaGUI的背景
java GUI开发库,经过最初的AWT,发展到Swing,SWT以及现在的Jface。这些GUI框架各有不同。
在AWT在JDK 1.0时引入,此时系统中只有重量级组件(heavyweight component)(见下文解释),这种组件采用"对等机制",对本地系统依赖性很大。 同时,采用这种方式时要处理诸如脏区脏检测,计算裁剪区和Z次序(damage detection, clip calculation, and z-ordering.)。
在JDK 1.1 中轻量级组件(lightweight component)被引入,AWT需要在共享的java 代码中实现它们的绘制过程。对于轻量级和重量级组件,AWT处理略有不同。
在JDK 1.1 之后引入了Swing,Swing绘图机制和AWT类似并且依赖于AWT,但是Swing在绘图机制上也与AWT有差别。AWT采用"对等机制",调用本地操作系统的控件。Swing只为诸如窗口和框架之类的顶层组件调用操作系统控件。大部分组件都是使用纯Java代码来模拟的。Swing也引入了新的API来简化绘图工作。
Swing与AWT的依赖关系可以参见下图(来自[3]) :
java类库中Swing与AWT类间关系如下图所示:
2. 关键概念
以下介绍以下java GUI编程中基本的概念,它们需要你了解,如果你未曾熟悉的话。
2.1 顶层窗口与窗口包含关系树
在java GUI中,任何想要显示的组件必须存在于一个窗口包含阶层(containment hierarchy)中。这个概念类似于树(或者像文件目录系统一样的递归结构),每个组件类似于树中的中间节点和叶子节点,