GEF理解系列三.docxVIP

  • 3
  • 0
  • 约6.1千字
  • 约 7页
  • 2017-12-19 发布于河南
  • 举报
GEF理解系列三

/blog/152087GEF理解系列三关键字: gef理解系列 经过以上步骤,我们已经有办法显示多个图形了。还是重提一下:Editor的初始状态由initializeGraphicalViewer()方法决定。不过在我们已经完成的过程,我们会发现,初始状态,也是最终状态,我们甚至不能移动任何一个图,当然了也不能增加和删除。下面我们要逐一的实现这些功能。在继续之前,我们先了解一下GEF执行操作的过程,看下图:图一 从上图可以看到。GEF把SWT事件包装成一个个的request发送到Controller(EditPart)上,通过Controller(EditPart)来操作、修改模型和视图。但是Controller(EditPart)并不直接进行操作。而是由安装在Controller(EditPart)上的一个个Policy来完成的。每个Controller(EditPart)上会安若干个Policies。当然了Policy其实也不直接完成操作,而只是返回一个对应的Command,由Command去实现真正的操作。 图二 在GEF中,实现任何操作,都是同样的路子:安装对应的Policy--返回某个Command--执行(由框架调) 我们应该还记得在之前的篇段里,我们一直没讲到EditPart的一个方法:createEditPolicies()。下面,就要开始用到这个方法了。 ?一、图形的移动与缩放首先需要明白的一点就是:对子图形的改变大小、变换位置的操作都是由父模型来负责完成的,因为子图形是附着在父图形上来显示。如果要实现对子模型的改变大小、变换位置的操作,我们需要在父模型的editpart上安装一个policy。可能初学的一个难点就是要找到一个直接对应的Policy。在EditPolicy里已经定义了一些Policy的Key常量。每个常量对应的Policy的名字通常和常量的名字相同。例如:常量名 类名 CONNECTION_ROLE ConnectionEditPolicy GRAPHICAL_NODE_ROLE GraphicalNodeEditPolicy COMPONENT_ROLE ComponentEditPolicy CONTAINER_ROLE ContainerEditPolicy DIRECT_EDIT_ROLE DirectEditPolicy 。。。。。。 。。。。。。表一所以如果我们选择了某个常量,就能知道应该选择哪个对应的EditPolicy;另外Policy名字有时也就决定了它的作用,所以要找到一个正确的Policy也不是太难。我个人觉得如果真的不知道应该选择哪个Policy,那就把觉得可能的一个一个的试,因为每个EditPolicy继承时都会有一些要求实现的方法,例如GraphicalNodeEditPolicy需要实现的方法有:protected Command getConnectionCompleteCommand(CreateConnectionRequest request)?; protected Command getConnectionCreateCommand(CreateConnectionRequest request)?; protected Command getReconnectSourceCommand(ReconnectRequest request)?; protected Command getReconnectTargetCommand(ReconnectRequest request) ;很显然,如果是要实现创建连接和重连的话,应该安装这个Policy,所以对应的安装就应该是: installEditPolicy(EditPolicy.GRAPHICAL_NODE_ROLE, new **GraphicalNodeEditPolicy()); 好了,废话少说。继续我们的事情。 要实现图形的移动和缩放,需要安装的Policy是LayoutEditPolicy,所以我们需要实现一个LayoutEditPolicy的子类,不过这里,我们要注意的是,我们应该继承的类为:XYLayoutEditPolicy。这是LayoutEditPolicy的一个子类。在实现之前,我们先想一下,要实现移动或者是缩放,我们需要哪些东西。很显示,我们要有一个需要将要移动或缩放的结点对象吧,对吧?另外,我们得知道移动或缩放后的位置大小吧,对吧?所以我们的command如果想完成这个任务,那么它至少需要知道这两个东西。所以我们的Policy可以如下实现了:public class DiagramLayoutPolicy extends XYLayoutEditPolicy { ?@Ove

文档评论(0)

1亿VIP精品文档

相关文档