- 浏览: 534529 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
gaolegao2008:
如果报 is_volum 列名找不到之类的,我是从新部署了一个 ...
spring quartz 定时器报错 -
gaolegao2008:
部署到linux上时,还有一种情况就是mysql数据库区分大小 ...
spring quartz 定时器报错 -
qq123zhz:
yahier 写道 对我有帮助,但我看的一个demo程序,却没 ...
spring quartz 定时器报错 -
qq123zhz:
这个要在eclipse的插件环境下运行的,你不懂eclipse ...
GEF 自动布局 -
qq123zhz:
这个很久了,不记得啥时候写的了
json转为Map
命令模式的结构如图:
在我们流程设计器中,实现复制粘贴功能,就是采用了命令模式,以剪切操作为例,当在编辑器中选中活动,在菜单中选择“剪切”,就会产生一个剪切命令(CutCommand对象)。
剪切操作所用到的类如下:
名称 |
说明 |
org.eclipse.gef.commands.Command |
命令的抽象类 |
org.eclipse.gef.commands.Command.CompoundCommand |
“结合多个命令的命令”的类 |
com.example.workflow.commands.CutCommand |
“剪切命令”的类 |
com.example.workflow.model.WorkflowProcess |
流程类 |
com.example.workflow.action.CutAction |
剪切动作类 |
Command抽象类,这个类中有个execute()方法。
CompoundCommand表示“结合多个命令的命令”的类,此类继承了Command类,这个类的commandList属性是java.util.ArrayList类型,用来存放多个继承Command的对象,这个类在执行execute()方法时,会把commandList中所用命令的execute()方法按ArrayList中顺序执行一边,在执行undo()方法时,会把commandList中所用命令的undo ()方法按ArrayList中反序执行一边。
CutCommand类表示“剪切活动命令”,该类继承了Command类,该类有parent和child两个属性,parent是WorkflowProcess对象,表示流程对象,child是AbstractActivity对象,表示要剪切的活动对象,在构造函数中,给这两个属性赋值,指明要从哪个流程模型中删除哪个活动,在execute()方法中调用parent的removeChild()方法,把活动从流程模型中删除。
CutAction类是调用命令的类,这个类继承了org.eclipse.gef.ui.actions.SelectionAction,在这个类的run()方法中新建了CutCommand和CompoundCommand对象,并且把CutCommand对象加入到CompoundCommand对象的commandList中,这样如果剪切多个活动,执行了多个CutCommand命令,但这些命令都放在commandList中,这样在用户开来,就是执行一个命令。
对照命令模式的结构图,CompoundCommand和CutCommand就相当于ConcreteCommand,WorkflowProcess相当于Reciever,而removeChild()方法就是Reciever的action()方法,而CutAction则同时扮演了Client和Invoker角色。
CutCommand类代码:
package com.example.workflow.commands;
import org.eclipse.gef.commands.Command;
import com.example.workflow.model.AbstractActivity;
import com.example.workflow.model.WorkflowProcess;
public class CutCommand extends Command{
private WorkflowProcess parent;
private AbstractActivity child;
public CutCommand(WorkflowProcess parent,AbstractActivity child){
super();
if (parent == null || child == null) {
throw new IllegalArgumentException();
}
this.parent = parent;
this.child = child;
setLabel("cut activity");
}
public boolean canExecute() {
return parent != null && child != null;
}
public void execute() {
redo();
}
public void redo() {
parent.removeChild(child);
}
public void undo() {
parent.addChild(child);
}
}
CutAction类代码:
package com.example.workflow.action;
import java.util.List;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.commands.CompoundCommand;
import org.eclipse.gef.ui.actions.Clipboard;
import org.eclipse.gef.ui.actions.SelectionAction;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.actions.ActionFactory;
import com.example.workflow.Activator;
import com.example.workflow.commands.CutCommand;
import com.example.workflow.model.AbstractActivity;
import com.example.workflow.model.WorkflowProcess;
import com.example.workflow.parts.WorkflowProcessEditPart;
public class CutAction extends SelectionAction{
private List selectionList = null;
private Clipboard clipboard = null;
private WorkflowProcess workflowProcess;
public CutAction(IWorkbenchPart part) {
super(part);
setId(ActionFactory.CUT.getId());
setText("Cut");
setImageDescriptor(ImageDescriptor.createFromFile(Activator.class, "icons/cut.gif"));
}
public Clipboard getClipboard() {
return clipboard;
}
public void setClipboard(Clipboard clipboard) {
this.clipboard = clipboard;
}
public WorkflowProcess getWorkflowProcess() {
return workflowProcess;
}
public void setWorkflowProcess(WorkflowProcess workflowProcess) {
this.workflowProcess = workflowProcess;
}
protected boolean calculateEnabled() {
selectionList = super.getSelectedObjects();
if(selectionList.isEmpty() ||
(selectionList.size() == 1 && selectionList.get(0) instanceof WorkflowProcessEditPart)){
return false;
}
return true;
}
public void run() {
getClipboard().setContents(selectionList);
execute(createCutCommand());
}
private Command createCutCommand(){
CompoundCommand compoundCmd = new CompoundCommand();
for(int i=0;i<selectionList.size();i++){
EditPart part = (EditPart)selectionList.get(i);
CutCommand cmd = new CutCommand(getWorkflowProcess(),(AbstractActivity)part.getModel());
compoundCmd.add(cmd);
}
return compoundCmd;
}
}
WorkflowProcess类代码:
package com.example.workflow.model;
import java.util.ArrayList;
import java.util.List;
/**
* 流程模型,可以包含多个活动和转移模型
* @author Administrator
*
*/
public class WorkflowProcess extends ModelElement{
private static final long serialVersionUID = -5478693636480758659L;
/** Property ID to use when a child is added to this WorkflowProcess. */
public static final String CHILD_ADDED_PROP = "WorkflowProcess.ChildAdded";
/** Property ID to use when a child is removed from this WorkflowProcess. */
public static final String CHILD_REMOVED_PROP = "WorkflowProcess.ChildRemoved";
private List activities = new ArrayList();
/**
* Add a Activity to this WorkflowProcess.
* @param s a non-null Activity instance
* @return true, if the Activity was added, false otherwise
*/
public boolean addChild(AbstractActivity a) {
if (a != null && activities.add(a)) {
firePropertyChange(CHILD_ADDED_PROP, null, a);
return true;
}
return false;
}
/** Return a List of Activities in this WorkflowProcess. The returned List should not be modified. */
public List getChildren() {
return activities;
}
/**
* Remove a Activity from this WorkflowProcess.
* @param s a non-null Activity instance;
* @return true, if the Activity was removed, false otherwise
*/
public boolean removeChild(AbstractActivity a) {
if (a != null && activities.remove(a)) {
firePropertyChange(CHILD_REMOVED_PROP, null, a);
return true;
}
return false;
}
}
发表评论
-
eclipse jdt builder的资料
2014-07-11 15:27 939eclipse jdt关于builder的英文资料。。。。 ... -
eclipse 插件开发 Setting the Java build path
2014-06-04 11:00 1216JDT Plug-in Developer Guide & ... -
RCP MessageConsole设置显示的最大行数
2013-09-05 11:34 966MessageConsole.setWaterMarks(5 ... -
RCP FileSystem 文件系统
2013-02-19 10:42 1381public static File toLocalFile ... -
eclipse4.x 去掉quick access
2013-01-11 14:57 4057/** * 去掉quick access * ... -
RCP 分页组件
2012-12-26 16:59 1500http://www.eclipse.org/nebula/w ... -
jdt 核心知识
2012-11-27 21:39 1279jdt官方核心知识...................... ... -
jdt 创建java工程,生成代码,运行main方法
2012-11-27 10:50 2345public static IJavaProje ... -
SWT 隔行换色-自动宽高调整
2012-10-16 17:32 1710** * 创建:ZhengXi 2009-8-4 */ ... -
RCP 为action添加操作进度条
2012-10-16 13:59 1292public class StartAction extend ... -
RCP 视图交互 ISelectionProvider和ISelectionListener,只响应鼠标左键
2012-10-10 18:36 2247有时候一个视图( V ... -
采用jface dataBinding来实现内容填充
2012-07-27 15:42 1192//采用jface dataBinding来实现内容填充 ... -
RCP 在视图中获得首选项修改后的结果
2012-07-27 15:35 1152在视图或者编辑器中加入如下代码: Activator.get ... -
RCP获得eclipse的相关位置
2012-07-24 11:14 1074InternalPlatform.getDefault().g ... -
swt/jface 获取table所有的列的值
2012-07-24 09:24 1423TableItem [] items = table.get ... -
org.eclipse.swt.SWTException: Subclassing not allowed
2012-07-19 15:09 1241org.eclipse.swt.SWTException: S ... -
Job found still running after platform shutdown.
2012-06-29 16:40 1857Job found still running after p ... -
eclipse插件开发 打开指定透视图
2012-06-12 14:08 1448打开透视图 PlatformUI.getWorkbench( ... -
eclipse 插件开发,报错No property tester contributes a property....
2012-06-12 11:29 2113ENTRY org.eclipse.ui.navigator ... -
eclipse JDT相关知识
2012-06-11 10:14 3991Java项目模型 Eclipse的项目有很多种,包括J ...
相关推荐
该框架的核心设计理念是基于MVC(Model-View-Controller)模式,它允许开发者将数据模型、视图呈现和用户交互逻辑有效地分离。 **EMF(Eclipse Modeling Framework)** 是GEF的紧密伙伴,它为构建和操作领域特定...
GEF使用命令模式来处理用户的编辑操作,每个编辑操作对应一个Command对象。当用户执行操作时,Command执行其doExecute()方法;如果需要撤销,调用undo()方法。 6. **适配器模式与EditPolicy** EditPolicy是GEF中...
6. **命令系统**:介绍GEF的命令架构,允许撤销/重做操作,保持编辑历史的完整性。 7. **自定义编辑策略**:解释如何实现特定的编辑行为,如添加、删除和修改元素的规则。 8. **图元工厂**:学习如何使用MetaFactory...
5. **命令模式**:GEF使用命令模式来处理对模型的更改,确保操作可撤销/重做。DEMO将展示如何创建和执行命令,以及如何实现撤销/重做功能。 6. **手势和事件处理**:学习如何响应用户的鼠标和键盘输入,比如拖放...
最后,可能会介绍事件处理和命令模式的应用,这些都是GEF中实现撤销/重做功能的关键。 GEF的核心概念包括: 1. **模型-视图-控制器(MVC)**:GEF基于MVC设计模式,模型存储图形数据,视图负责显示,控制器处理...
- `org.eclipse.gef.commands.Command`:命令模式在GEF中用于执行可撤销/重做的操作,如添加、删除或修改图形元素。 - `org.eclipse.gef.requests.Request`:表示用户或系统对编辑域的某种请求,如创建新对象或选择...
5. **命令(Commands)**:GEF使用命令模式来处理用户的操作,每个图形编辑操作都对应一个命令对象,便于撤销/重做操作。 6. **手势( Gestures)**:手势处理用户输入,如鼠标点击、拖放等,将这些输入转化为图形...
1. **定义剪切/复制命令**:使用GEF提供的命令模式来定义剪切/复制命令。 2. **定义粘贴命令**:同样使用命令模式定义粘贴命令。 3. **处理剪切板**:确保剪切板中的数据能够在不同操作之间正确传递。 #### 结论 ...
3. **命令(Commands)**:GEF使用可撤销/重做的命令系统来处理图形编辑操作,确保数据的正确性和一致性。 4. **手势(Gesture)**:定义了用户与图形界面的交互方式,如拖拽、点击等。 5. **图元工厂...
- **Command和Transaction**:GEF使用命令模式来处理编辑操作,命令可以撤销和重做。同时,所有修改都封装在事务中,确保数据的一致性。 **2. GEF的架构** - **Zest图渲染引擎**:GEF通常与Zest结合使用,Zest是一...
6. **命令框架**:支持可撤销/重做的命令模式,确保用户操作的可逆性。 7. **图元选择**:提供了多种选择模式,包括单选、多选和矩形选择等。 8. **布局管理器**:提供了各种布局策略,如树状布局、网格布局等,可以...
4. **命令(Command)**:GEF中的命令模式用于封装对模型的修改操作,使得撤销/重做功能得以实现。命令对象记录了更改前后的状态,便于执行回滚或重复操作。 5. **图元(Figure)**和**绘图(Drawing)**:GEF通过SWT...
在GEF(Graphical Editing Framework)中,理解其工作流程对于开发图形编辑工具至关重要。GEF主要用于构建基于SWT...通过不断实践和调试,开发者可以熟练掌握GEF的各种策略和命令,从而构建出功能丰富的图形编辑工具。
3. **手势和命令**:GEF支持多种用户手势(如拖拽、双击等)并将其转化为可执行的命令,这极大地增强了图形编辑器的交互性。 4. **连接器和容器**:GEF提供了处理图形元素之间连接以及包含关系的机制,如树形结构、...
1. **模型-视图-控制器(MVC)架构**:GEF遵循MVC设计模式,分离了数据模型、视图显示和用户交互控制,使得代码组织清晰,易于维护。 2. **图形绘制与布局**:GEF提供了一套图形绘制API,支持基本形状、连接线、...
- **Step 8-9**:讲解命令模式的应用,实现可撤销/重做功能,并讨论如何处理模型变化的传播。 - **Step 10-11**:高级特性,如自定义编辑策略、图元工厂和工具栏的添加。 **4. 代码示例** 每个步骤的代码文件(gef....
GEF遵循经典的MVC(Model-View-Control)架构,这一设计模式使得模型、视图和控制器各司其职,减少了各组件间的耦合度,提高了系统的可维护性和灵活性。 #### 二、GEF的关键组件解析 1. **模型(Model)**:模型是...
4. **命令(Command)模式**:GEF使用命令模式来处理用户操作,每个操作都被封装为一个命令对象,可以撤销或重做,提供了强大的编辑功能。 5. **适配器(Adapter)和观察者(Observer)模式**:适配器模式使得不同...
6. **命令(Command)**:GEF采用命令模式来处理用户操作,每个命令代表一个可撤销/重做的操作,增强了编辑器的用户友好性。 **三、GEF的开发流程** 1. **定义模型**:首先,你需要定义自己的数据模型,这是编辑器...
4. **Command(命令)**: GEF使用命令模式来实现对模型的修改。每个命令代表一个可逆的操作,确保用户可以撤销或重做他们的动作。 5. **ZOrder Manager(层序管理器)**: 确保图形元素在视图中的层次关系,以便正确...