快速业务通道

[Eclipse]GEF入门系列(三、应用实例) - 编程入门网

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

[Eclipse]GEF入门系列(三、应用实例)

时间:2011-04-19 cnblogs bjzhanghao

构造一个GEF应用程序通常分为这么几个步骤:设计模型、设计EditPart和Figure、设计 EditPolicy和Command,其中 EditPart是最主要的一部分,因为在实现它的时候不可避免的 要使用到EditPolicy,而后者又涉及到Command。

现在我们来看个例子,它的功能非常简单,用户可以在画布上增加节点(Node)和节点间 的连接,可以直接编辑节点的名称以及改变节点的位置,用户可以撤消/重做任何操作,有一 个树状的大纲视图和一个属性页。这是一个Eclipse的项目打包文件,在Eclipse里导入后运 行Run-time Workbench,新建一个扩展名为"gefpractice"的文件就会打开这个编辑器。

图1 Practice Editor的使用界面

[Eclipse]GEF入门系列(三、应用实例) - 编程入门网

你可以参考着代码来看接下来的内容了,让我们从模型开始说起。模型是根据应用需求来 设计的,所以我们的模型包括代表整个图的Diagram、代表节点的Node和代表连接的 Connection这些对象。我们知道,模型是要负责把自己的改变通知给EditPart的,为了把这 个功能分离出来,我们使用名为Element的抽象类专门来实现通知机制,然后让其他模型类继 承它。Element类里包括一个PropertyChangeSupport类型的成员变量,并提供了 addPropertyChangeListener()、removePropertyChangeListener()和 fireXXX()方法分别用 来注册监听器和通知监听器模型改变事件。在GEF里,模型的监听器就是EditPart,在 EditPart的active ()方法里我们会把它作为监听器注册到模型中。所以,总共有四个类组成 了我们的模型部分。

[Eclipse]GEF入门系列(三、应用实例)(2)

时间:2011-04-19 cnblogs bjzhanghao

在前面的贴子里说过,大部分GEF应用程序都是实现为Editor的,这个例子也不例外,对 应的Editor名为PracticeEditor。这个Editor继承了GraphicalEditorWithPalette类,表示 它是一个具有调色板的图形编辑器。最重要的两个方法是 configureGraphicalViewer()和 initializeGraphicalViewer(),分别用来定制和初始化 EditPartViewer(关于 EditPartViewer的作用请查看前面的帖子),简单查看一下GEF的代码你会发现,在 GraphicalEditor类里会先后调用这两个方法,只是中间插了一个hookGraphicalViewer()方 法,其作用是同步选择和把 EditPartViewer作为SelectionProvider注册到所在的site (Site是Workbench的概念,请查Eclipse帮助)。所以,与选择无关的初始化操作应该在前 者中完成,否则放在后者完成。例子中,在这两个方法里我们配置了RootEditPart、用于创 建 EditPart的EditPartFactory、Contents即Diagram对象和增加了拖放支持,拖动目标是当 前 EditPartViewer,后面会看到拖动源就是调色板。

这个Editor是带有调色板的,所以要告诉GEF我们的调色板里都有哪些工具,这是通过覆 盖getPaletteRoot()方法来实现的。在这个方法里,我们利用自己写的一个工具类 PaletteFactory构造一个PaletteRoot对象并返回,我们的调色板里需要有三种工具:选择工 具、节点工具和连接工具。在GEF里,调色板里可以有抽屉(PaletteDrawer)把各种工具归 类放置,每个工具都是一个ToolEntry,选择工具(SelectionToolEntry)和连接工具 (ConnectionCreationToolEntry)是预先定义好的几种工具中的两个,所以可以直接使用。 对于节点工具,要使用CombinedTemplateCreationEntry,并把节点类型作为参数之一传给它 ,创建节点工具的代码如下所示。

ToolEntry tool = new CombinedTemplateCreationEntry("Node", "Create a new Node", Node.class, new SimpleFactory(Node.class), null, null);

在新的3.0版本GEF里还提供了一种可以自动隐藏

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号