GEF原理及实现系列(六、命令)

来源:互联网 发布:纸白银行情软件 编辑:程序博客网 时间:2024/05/20 18:55

关键字: commands
为了提高代码的重用性,以及实现GEF编辑器的功能,GEF采用命令模式提供了对模型的操作方式。

1.命令(Commands)的功能

在EditPolicies中新建了命令,如果返回的命令不为空,GEF框架会执行命令,对模型进行相应的修改。Command是GEF中的一个抽象类,主要实现了如下的几个方法:    (1)execute:这是命令的执行方法,当请求结束并获得Command后,GEF框架会负责执行此方法。    (2)undo:对模型修改后,可以通过undo进行撤销。    (3)redo:当用户撤销后,能通过redo重复上一次的操作。

2.命令的实现

GEF通过一个命令堆栈(CommandStack)保存Command对象。用户可以通过命令堆栈撤销或重复对模型所做的操作。下面代码是模型位置改变的命令:

java 代码

1.package com.example.commands;  2.  3.import org.eclipse.draw2d.geometry.Point;  4.import org.eclipse.gef.commands.Command;  5.  6.import com.example.model.Node;  7.  8.public class MoveNodeCommand extends Command {  9.    //命令对应的模型  10.    private Node node;  11.    //原始位置  12.    private Point oldPos;  13.    //新位置  14.    private Point newPos;  15.    //设置新位置  16.    public void setLocation(Point p) {  17.        this.newPos = p;  18.    }  19.    //设置命令对应的模型  20.    public void setNode(Node node) {  21.        this.node = node;  22.    }  23.    //执行命令  24.    public void execute() {  25.        //保存模型原来的位置  26.        oldPos = this.node.getLocation();  27.        node.setLocation(newPos);  28.    }  29.  30.    public String getLabel() {  31.        return "Move Node";  32.    }  33.    //重复上一操作  34.    public void redo() {  35.        this.node.setLocation(newPos);  36.    }  37.    //撤销设置新位置的操作  38.    public void undo() {  39.        this.node.setLocation(oldPos);  40.    }  41.}  
通过命令堆栈(CommandStack),GEF编辑器能轻松完成用户的撤销和重做操作,GEF框架会维护命令堆栈。
0 0
原创粉丝点击