|
|
| 保留的图形对象(Retained Graphic Objects)API 简介 |
作者:
文章来源:
访问次数:1次
加入时间:2005年01月01日
|
|
创建您自己的 Java 平台可重用图形对象 Barry Feigenbaum(feigenba@us.ibm.com) 高级 IT 咨询专家,IBM 2001 年 11 月
Java 专家 Barry Feigenbaum 创建了保留的图形对象(Retained Graphic Objects (RGO))API 来启用 Java 平台的可重用图形对象的创建。本文中,Barry 描述了组成 RGO API 的类和方法,并在 Java 编程环境中演示了它们的使用。遵照本文中的上机实践示例,您将学会如何创建并保留诸如直线、椭圆、矩形、文本、子图形等对象类型。 创建持久(或者保留的)图形的能力还不是“抽象窗口工具箱(Abstract Window Toolkit (AWT))”的标准部分。相反,绘制的每个图形在每次显示其包含的容器时由应用程序代码重新绘制。本文中,我将向您介绍,如何通过向 Java 平台添加保留的图形对象(RGO)来解决 AWT 这个局限性。我的开发的方法 ? RGO API ? 需要的代码最少,并且可以在需要的时候允许您添加并实现多种对象类型。
保留的图形对象 RGO 提供了基于创建可绘制对象(类 Drawable 的实例)的强大和便利的绘图性能,这些对象收集在一个有序集(类 DrawableSequencer 的实例)中,然后每当需要呈现一个给定的对象时,它就重新绘制这个集合。可绘制对象和对象集都有描绘服务并且可以持久地储存它们自己。第三个相关类称为 DrawingContext,它抽取类 java.awt.Graphics 中定义的 Java 对象表示服务。(请注意,出于本文的目的,我们将使用 Graphics 类,而不是更强大更复杂的 Graphics2D。将 Graphics2D 用于更丰富的图形是一个简单的扩展问题。)
通过为每个保留的对象形式创建类的类型来定义 RGO。这些类都是类 Drawable 的子类,它们定义了可以保留的图形对象的类型。直线、椭圆、矩形、文本和子图形是其中一些类型示例。我们在本文中定义的相应样本对象是:
DrawableLine
DrawableOval
DrawableBox
DrawableText
DrawableSprite 许多其它图形对象类型,比如位图、三角形和常规的多边形可以根据需要添加。
使用 drawables 图 1 是一个说明 drawables 包中各类之间关系的 UML 模型。请注意 Drawables、DrawableSequencer 和 DrawingContext 之间的关系。
图 1. drawables 包中各类的关系
在下面的图 2 中,我向 DrawableSequencer 实例添加了 Drawable 子类的三个实例。一组 DrawableSequencerObject 实例记录了可绘制对象的显示优先级和对它的一个引用(实线箭头所示)。 DrawableSequencerObject 实例记录在 DrawableSequencer 实例内部的集合(实际上是 java.util.Vector)中。
在任何 DrawableSequencer.draw(DrawingContext) 方法调用期间,使用 DrawableSequencerEnumerator 实例来枚举(通过虚线箭头)DrawableSequencerObject 对象。
图 2. 向 DrawableSequencer 添加 Drawable 的三个实例
图 4. 椭圆和方形演示,以及更改缩放比
请注意表 4 中对象的相对位置。许多对象被优先级较高的对象所遮盖。
图 5. 子图形演示
图 6. 缩放并移动对象后的演示
图 7. 样本演示界面
结束语 使用本文提供的示例以及所包含的源码,您应该发现在需要图形对象时,创建和保留它们相当简单。另外,可以以本文中的示例为起点,在这里描述的 API 上创建您自己的变体。因为类 Drawable 和类 DrawingContext 都可以生成子类,因此添加新的可绘图对象和 java.awt.Graphics 绘图服务接口非常容易。新的对象作为 Drawable 的新子类添加。新的绘图服务和数据转换作为 DrawingContext 的子类添加。
参考资料
有效演示和源码
DrawableTester 使用 AWT GUI 和自存储方法来保留图形文件。
DrawableTester2 使用 Swing GUI 和自存储方法来保留图形文件。
DrawableTesterOS 使用 Swing GUI 和 ObjectStream 持久性方法来保留图形文件。
技术参考资料
IBM alphaWorks 提供了 Java 的图形基础类(GFC),它是 Java 语言中图形的编程框架。
IBM 研究小组支持许多与图形和可视化编程有关的项目。 附加的相关内容
RGO API 只是 Barry Feigenbaum 的发明之一。他的文章“ Take command of your client/server apps”(developerWorks,2001 年 6 月)详细叙述了 Barry 实现客户机/服务器对话应用程序的轻量级方法。
John Carr 在他的文章“JSci: An open-source alternative for Java 2D graphing”(developerWorks,2001 年 10 月)中提出了基于 Java 2D 图形备用开放源码。
Bertrand Portier 的“Java 2 gets a new focus subsystem”(developerWorks,2001 年 10 月)讨论了 Merlin(Java 2 标准版,v1.4)为 AWT 焦点管理子系统带来的几个激动人心的更改。
John Zukowski 的“ AWT roundup” (developerWorks,2001 年 11 月)进一步详细描述了对 AWT 类库最近的更改。
可以在 IBM developerWorks 的 Java 技术专区中找到许多有关 Java 编程各方面的文章。
关于作者 Barry Feigenbaum 博士在开发操作系统和复杂应用程序方面有 20 多年的经验。目前他是 IBM Developer Relations IT 领域的系统架构师。他曾经是专门从事电子商务支持技术(诸如 Java 技术、HTML、servlet、JSP 技术以及 EJB 组件)的顾问。他是面向对象的分析、设计和开发方面的专家,并且非常精通客户机/服务器和 n 层体系结构的最新趋势。他持有多项专利。他还发表了许多书籍和文章,并代表 IBM 出席技术会议和贸易展示。他是美国奥斯汀的德克萨斯大学的副教授。可以通过 feigenba@us.ibm.com 与 Barry 联系。
|
|
|