快速业务通道

[Eclipse]GEF入门系列(一、Draw2D) - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17

[Eclipse]GEF入门系列(一、Draw2D)

时间:2011-04-19 cnblogs bjzhanghao

关于Java2D相信大家都不会陌生,它是基于AWT/Swing的二维图形处理包, JDK附带的示 例程序向我们展示了Java2D十分强大的图形处理能力。在Draw2D出现以前,SWT应用程序在这 方面一直处于下风,而Draw2D这个SWT世界里的Java2D改变了这种形势。

可能很多人还不十分了解GEF和Draw2D的关系:一些应用程序是只使用Draw2D,看起来却 和GEF应用程序具有相似的外观。原因是什么,下面先简单解释一下:

GEF是具有标准MVC(Model-View-Control)结构的图形编辑框架,其中Model由我们自己 根据业务来设计,它要能够提供某种模型改变通知的机制,用来把Model的变化告诉Control 层;Control层由一些EditPart实现,EditPart是整个GEF的核心部件,关于EditPart的机制 和功能将在以后的帖子里介绍;而View层(大多数情况下)就是我们这里要说的Draw2D了, 其作用是把Model以图形化的方式表现给使用者。

虽然GEF可以使用任何图形包作为View层,但实际上GEF对Draw2D的依赖是很强的。举例来 说:虽然EditPart(org.eclipse.gef.EditPart)接口并不要求引入任何Draw2D的类,但我 们最常使用的AbstractGraphicalEditPart类的createFigure()方法就需要返回IFigure类型 。由于这个原因,在GEF的SDK中索性包含了Draw2D包就不奇怪了,同样道理,只有先了解 Draw2D才可能掌握GEF。

这样,对于一开始提出的问题可以总结如下:Draw2D是基于SWT的图形处理包,它适合用 作GEF的View层。如果一个应用仅需要显示图形,只用Draw2D就够了;若该应用的模型要求以 图形化的方式被编辑,那么最好使用GEF框架。

现在让我们来看看Draw2D里都有些什么,请看下图。

[Eclipse]GEF入门系列(一、Draw2D) - 编程入门网

图1 Draw2D的结构

Draw2D通过被称为LightweightSystem(以下简称LWS)的部件与SWT中的某一个Canvas实 例相连,这个Canvas在Draw2D应用程序里一般是应用程序的Shell,在GEF应用程序里更多是 某个Editor的Control(createPartControl()方法中的参数),在界面上我们虽然看不到LWS 的存在,但其他所有能看到的图形都是放在它里面的,这些图形按父子包含关系形成一个树 状的层次结构。

LWS是Draw2D的核心部件,它包含三个主要组成部分:RootFigure是LWS中所有图形的根, 也就是说其他图形都是直接或间接放在RootFigure里的;EventDispatcher把Canvas上的各种 事件分派给RootFigure,这些事件最终会被分派给适当的图形,请注意这个RootFigure和你 应用程序中最顶层的IFigure不是同一个对象,前者是看不见的被LWS内部使用的,而后者通 常会是一个可见的画布,它是直接放在前者中的;UpdateManager用来重绘图形,当Canvas被 要求重绘时,LWS会调用它的performUpdate()方法。

[Eclipse]GEF入门系列(一、Draw2D)(2)

时间:2011-04-19 cnblogs bjzhanghao

LWS是连接SWT和Draw2D的桥梁,利用它,我们不仅可以轻松创建任意形状的图形(不仅仅 限于矩形),同时能够节省系统资源(因为是轻量级组件)。一个典型的纯Draw2D应用程序 代码具有类似下面的结构:

//创建SWT的Canvas(Shell是Canvas的子类) Shell shell = new Shell(); shell.open(); shell.setText("A Draw2d application"); //创建LightweightSystem,放在shell上 LightweightSystem lws = new LightweightSystem(shell); //创建应用程序中的最顶层图形 IFigure panel = new Figure(); panel.setLayoutManager(new FlowLayout()); //把这个图形放置于LightweightSystem的RootFigure里 lws.setContents(panel);  //创建应用程序中的其他图形,并放置于应用程序的顶层图形中 panel.add(); while (!shell.isDisposed ()) { if (!display.readA

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号