快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
调色板的编辑器 GraphicalEditorWithFlyoutPalette,对调色板的外观有更多选项可以选择,以后的帖子里 可能会提到如何使用。

调色板的初始化操作应该放在initializePaletteViewer()里完成,最主要的任务是为调 色板所在的 EditPartViewer添加拖动源事件支持,前面我们已经为画布所在EditPartViewer 添加了拖动目标事件,所以现在就可以实现完整的拖放操作了。这里稍微讲解一下拖放的实 现原理,以用来创建节点对象的节点工具为例,它在调色板里是一个 CombinedTemplateCreationEntry,在创建这个PaletteEntry时(见上面的代码)我们指定该 对象对应一个 Node.class,所以在用户从调色板里拖动这个工具时,内存里有一个 TemplateTransfer单例对象会记录下Node.class(称作 template),当用户在画布上松开鼠 标时,拖放结束的事件被触发,将由画布注册的 DiagramTemplateTransferDropTargetListener对象来处理template对象(现在是Node.class ),在例子中我们的处理方法是用一个名为ElementFactory的对象负责根据这个template创 建一个对应类型的实例。

以上我们建立了模型和用于实现视图的Editor,因为模型的改变都是由Command对象直接 修改的,所以下面我们先来看都有哪些 Command。由需求可知,我们对模型的操作有增加/删 除节点、修改节点名称、改变节点位置和增加/删除连接等,所以对应就有 CreateNodeCommand、DeleteNodeCommand、RenameNodeCommand、MoveNodeCommand、 CreateConnectionCommand和DeleteConnectionCommand这些对象,它们都放归类在commands 包里。一个 Command对象里最重要的当然是execute()方法了,也就是执行命令的方法。除此 以外,因为要实现撤消/重做功能,所以在Command对象里都有Undo()和Redo()方法,同时在 Command对象里要有成员变量负责保留执行该命令时的相关状态,例如RenameNodeCommand 里 要有oldName和newName两个变量,这样才能正确的执行Undo()和Redo()方法,要记住,每个 被执行过的Command对象实例都是被保存在EditDomain的CommandStack中的。

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

时间:2011-04-19 cnblogs bjzhanghao

例子里的EditPolicy都放在policies包里,与图形有关的(GraphicalEditPart的子类) 有 DiagramLayoutEditPolicy、NodeDirectEditPolicy和 NodeGraphicalNodeEditPolicy, 另外两个则是与图形无关的编辑策略。可以看到,在后一种类型的两个类 (ConnectionEditPolicy和NodeEditPolicy)中我们只覆盖了createDeleteCommand()方法, 该方法用于创建一个负责"删除"操作的Command对象并返回,要搞清这个方法看似矛盾的名字 里create和delete是对不同对象而言的。

有了Command和EditPolicy,现在可以来看看EditPart部分了。每一个模型对象都对应一 个EditPart,所以我们的三个模型对象(Element不算)分别对应DiagramPart、 ConnectionPart和NodePart。对于含有子元素的EditPart,必须覆盖getModelChildren()方 法返回子对象列表,例如DiagramPart里这个方法返回的是Diagram对象包含的Node对象列表 。

每个EditPart都有active()和deactive()两个方法,一般我们在前者里注册监听器(因为 实现了 PropertyChangeListener接口,所以EditPart本身就是监听器)到模型对象,在后者 里将监听器从列表里移除。在触发监听器事件的propertyChange()方法里,一般是根据"事件 名"称决定使用何种方式刷新视图,例如对于NodePart,如果是节点本身的属性发生变化,则 调用refreshVisuals()方法,若是与它相关的连接发生变化,则调用 refreshTargetConnections()或 refreshSourceConnections()。这里用到的事件名称都是我 们自己来规定的,在例子

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