请求和编辑策略是GEF框架中减轻控制器的负担、减小代码耦合度而实现的一种解决方案。
1.请求和编辑策略(Request and EditPolicies)
请求和编辑策略对初学者来说是比较难理解的部分,但正是因为这种机制才使得GEF框架功能强大,而且非常灵活。
在EditPart中,可以通过设置不同的编辑策略(EditPolicies)来处理不同的请求,这样,一方面,可以把代码从EditPart中解放处 理,分别由不同的EditPolicies进行处理,另一方面,用户可以着力于自己的关注点,但由此也增加了学习GEF框架的时间。
另外,在EditPart中设置编辑策略时,要指定相应的角色(Role),角色只是一个标识,在同一个EditPart中不能存在两个相同角色的编辑策略,读者可以在GEF的联机文档(
http://help.eclipse.org/help32/index.jsp?topic=/org.eclipse.gef.doc.isv/guide/guide.html )中找到详细的编辑策略、请求和角色说明。
2.编辑策略的实现
控制器中通过createEditPolicies()方法添加编辑策略,每种编辑策略负责处理相应的请求。通常请求一般会对模型进行操作,在EditPolicies中,可以通过命令的方式操作模型,命令将在后面介绍。EditPolicies代码如下:
java 代码
- package com.example.policies;
-
- import org.eclipse.draw2d.geometry.Rectangle;
- import org.eclipse.gef.EditPart;
- import org.eclipse.gef.Request;
- import org.eclipse.gef.commands.Command;
- import org.eclipse.gef.editpolicies.XYLayoutEditPolicy;
- import org.eclipse.gef.requests.CreateRequest;
-
- import com.example.commands.CreateNodeCommand;
- import com.example.commands.MoveNodeCommand;
- import com.example.model.Diagram;
- import com.example.model.Node;
- import com.example.parts.NodePart;
-
- public class DiagramLayoutEditPolicy extends XYLayoutEditPolicy {
-
- protected Command createAddCommand(EditPart child, Object constraint) {
- return null;
- }
-
- protected Command createChangeConstraintCommand(EditPart child, Object constraint) {
-
- if (!(child instanceof NodePart))
- return null;
- if (!(constraint instanceof Rectangle))
- return null;
-
- MoveNodeCommand cmd = new MoveNodeCommand();
- cmd.setNode((Node) child.getModel());
-
- cmd.setLocation(((Rectangle) constraint).getLocation());
- return cmd;
-
- }
-
- protected Command getCreateCommand(CreateRequest request) {
-
- if (request.getNewObject() instanceof Node) {
-
- CreateNodeCommand cmd = new CreateNodeCommand();
-
- cmd.setDiagram((Diagram) getHost().getModel());
-
- cmd.setNode((Node) request.getNewObject());
- Rectangle constraint = (Rectangle) getConstraintFor(request);
-
- cmd.setLocation(constraint.getLocation());
-
- return cmd;
- }
- return null;
- }
-
- protected Command getDeleteDependantCommand(Request request) {
- return null;
- }
- }
通过实现此编辑策略,GEF编辑器将能够处理XYLayoutEditPolicy所能响应的相关请求,并交由相应的Command进行处理。
分享到:
相关推荐
- `gef.jar` 包含了GEF框架的核心库,提供图形编辑器构建所需的所有类和接口。 - `commons-logging.jar` 是Apache Commons Logging库,是一个日志接口抽象层,允许在运行时选择不同的日志实现。在GEF开发中,它用于...
- `org.eclipse.gef.editpolicies`包下的类:提供了各种编辑策略,如连接策略、布局策略等,它们决定了EditPart如何响应特定请求。 - `org.eclipse.gef.handles`包下的类:用于创建图形元素的手柄,用户可以通过手柄...
总之,GEF通过将图形操作分解为请求、Policy和Command,实现了灵活且可扩展的图形编辑环境。理解这一机制有助于开发者更高效地构建自己的图形编辑应用,包括实现图形的移动、缩放以及更多复杂的交互功能。通过不断...
源码标签表明内容可能包含了实际的代码示例,这对于学习和理解GEF的工作原理和如何在实际项目中应用非常有帮助。工具标签则暗示了这个例子可能涉及到了使用GEF作为开发工具或者集成到其他工具链中的情况。 文件名...
本资料集旨在为初学者提供一个全面的入门指南,帮助理解GEF的基础概念和实现方法。 GEF的核心功能是提供了一套强大的组件和API,用于创建可交互的、图形式的用户界面。通过使用GEF,开发者可以轻松地创建出具有拖放...
通过命令,开发者可以解耦UI和实现,使得功能可以独立于其表示进行定义和扩展。 6. **Property and Selection Services**:属性服务和选择服务允许不同组件之间共享信息和协调行为,如传递当前选中的对象。 **GEF...
总的来说,理解和实现GEF中的拷贝粘贴功能需要对GEF框架有深入的理解,包括其命令模型、EditPolicy和模型-视图交互。通过这种方式,开发者可以为自己的图形编辑器提供与操作系统一致的拷贝粘贴体验。
**GEF(Graphical Editing Framework)深度解析** GEF,全称为Graphical Editing Framework,是Eclipse平台下用于构建图形编辑器的...通过深入理解GEF的原理和实践,开发者可以更高效地构建出功能丰富的图形编辑应用。
本教程将深入探讨GEF的核心概念和应用,通过分析提供的DEMO源码,帮助读者掌握其设计模式和实现技巧。 **1. GEF概述** GEF主要由三部分组成:MVC(Model-View-Controller)、Command和Zest。MVC模式用于分离数据...
通过这些资料,学习者可以系统地学习GEF的各个方面,包括基本原理、实例演示和实战技巧,从而具备开发图形编辑器的能力。在阅读过程中,建议结合实际编程实践,以便更好地理解和掌握GEF的精髓。
通过这个GEF入门系列,你可以逐步掌握如何利用GEF创建强大的图形化编辑器,无论是简单的绘图工具还是复杂的业务流程编辑器,GEF都能提供坚实的技术支持。在实践中不断探索和学习,你将能够充分发挥GEF的潜力,构建出...
- 编写编辑策略和操作,实现图形编辑功能。 - 添加菜单和工具栏项,与用户交互。 6. **事件处理和命令**: - GEF使用命令架构来处理用户操作,如添加、删除和修改图形元素。 - 命令可以记录并执行,实现撤销/...
开发者可以通过实现GEF提供的接口和回调方法,轻松地定制自己的图形编辑器,用于创建流程图、网络拓扑图、UML模型等各种图形表示。 本入门系列将涵盖以下几个主要知识点: 1. **EMF基础**:首先会讲解EMF的核心...
GEF的核心是其五层架构,包括Model(模型)、View(视图)、EditPart(编辑部件)、Figure(图形)和Command(命令)。模型负责存储数据,视图负责显示数据,EditPart作为模型和视图之间的桥梁,Figure处理图形绘制...
GEF入门系列,八进制 的GEF入门系列教程, 由社区经作者授权后整理而成GEF(Graphical Editor Framework)是一个图形化编辑框架,它允许开发人员以图形化的方式展示和编辑模型,从而提升用户体验。这样的应用程序有很...
通过本教程,您应该能够理解GEF的基本结构和工作原理,以及如何在Eclipse RCP应用中集成GEF。此外,还介绍了如何设置项目依赖、创建编辑器以及实现GEF的基本组件。这些步骤不仅适用于本教程的示例,也是构建更复杂...
通过将复杂的编辑操作抽象为请求(Request)、角色(Role)、策略(EditPolicy)和命令(Command),GEF提供了一套灵活且强大的机制,让开发者可以专注于业务逻辑,而不必担心图形界面的具体实现细节。 #### 五、GEF在实际...
总结来说,GEF是一个强大的图形化编辑框架,它通过MVC模式和一系列设计策略,如请求和命令模式,降低了开发图形界面的复杂性。同时,模型和视图的解耦使得系统具有更高的灵活性,使得开发者可以专注于业务逻辑的实现...