`
windyer39
  • 浏览: 10543 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

GEF中组件删除功能的实现

阅读更多
跟着入门教程一步一步走下来,好歹有个可视化编辑器的样子,看起来还像那么回事。
回过头,发现添加的组件还没有删除功能。现在介绍一下如何实现组件删除的功能。

step 1:要能删除组件必须要有菜单、按钮或者用del键,于是需要在你编辑器的ActionBarContributor中添加相关的代码来获得主工具条上的删除按钮,同时也将激活edit菜单中的delete选项。
public void contributeToToolBar(IToolBarManager toolBarManager) {
  // TODO Auto-generated method stub
  …… 
  toolBarManager.add(getAction(ActionFactory.DELETE.getId()));
……
}
关于工具条菜单部分功能实现的详细介绍,八进制的blog上有详细介绍。

step 2:动作触发后要有editPart接收相应的request,然后转交给某个editPolicy进行处理。在删除过程中,是被删除组件的editPart接收删除request。在这个editPart中注册一个继承于ComponentEditPolicy的policy,editpart将把request转交给这个policy处理。在policy中需要重写createDeleteCommand(GroupRequest deleteRequest)方法来生成对删除动作进行处理的command对象,并对该对象的属性进行一些设置,然后返回。
代码如下:
NodeEditPart类中
protected void createEditPolicies() {
  // TODO Auto-generated method stub
……
  installEditPolicy(EditPolicy.COMPONENT_ROLE, new NodeEditPolicy());


……
}

NodeEditPolicy类


public class NodeEditPolicy extends ComponentEditPolicy {

public NodeEditPolicy() {
  super();
  // TODO Auto-generated constructor stub
}
protected Command createDeleteCommand(GroupRequest deleteRequest) {
  // TODO Auto-generated method stub
  Object parent = getHost().getParent().getModel(); 
  RemoveNodeCommand command = new RemoveNodeCommand();
  command.setParent((BaseModel)parent);
  command.setChild((BaseModel)getHost().getModel()); 
  return command; 
}

}




step3:实现command类


public class RemoveNodeCommand extends Command {

//private List parent;
private NodeModel parent;
private NodeModel child;

public NodeModel  getChild() {
  return child;
}

public void setChild(NodeModel child) {
  this.child = child;
}

public NodeModel getParent() {
  return parent;
}

public void setParent(NodeModel parent) {
  this.parent = parent;
}

public RemoveNodeCommand() {
  super();
  // TODO Auto-generated constructor stub
}

public RemoveNodeCommand(String label) {
  super(label);
  // TODO Auto-generated constructor stub
}

public void execute() {
  // TODO Auto-generated method stub
   Assert.isNotNull(parent);
  Assert.isNotNull(child); 
  parent.removeChild(child);  
}

}

当然容器类的模型要实现removeChild方法才行
public void removeChild(nodeModelchild){
     child.setParent(null);
     getChildren().remove(child);
     this.fireChildrenChange(child);
    }

以上介绍的这些是我进行实现的一个过程,实际实现的时候应该抽象出一个基类模型和对应的editpart,这样就不用重复在每个组件中编写了。实现完成后工具条上的按钮,主菜单中的删除选项,键盘的del键都可以用来进行删除操作。
注意这里没有写command里的redo和undo操作。

分享到:
评论

相关推荐

    gef 转折线的相关方法实现和 GEF的API chm 格式

    - `org.eclipse.gef.EditPart`:这是GEF的核心组件,它代表了图形模型中的一个元素,并负责将其映射到视图中。 - `org.eclipse.gef.GraphicalEditPart`:是EditPart的一个子类,专门处理图形元素的绘制和交互。 - `...

    GEF入门学习例子

    这个入门学习例子旨在帮助初学者理解GEF的基本用法和核心概念,通过实例展示如何利用GEF实现工具栏、菜单栏、属性栏以及图形的交互功能,如移动、删除、撤销、连线等,并涵盖了大纲视图和鹰眼功能的实现。...

    GEF入门必读 GEF入门系列 GEF-whole-upload

    GEF的核心功能是提供了一套强大的组件和API,用于创建可交互的、图形式的用户界面。通过使用GEF,开发者可以轻松地创建出具有拖放、连接线、节点和图形编辑功能的应用。在Java编程中,GEF是一个非常有价值的工具,...

    GEF中文帮助实例

    GEF(Graphical Editing Framework)是Eclipse平台中的一个组件,主要用于创建图形化的编辑器。它提供了一套完整的框架,用于构建可扩展的、交互式的图形编辑应用程序,特别是针对那些需要可视表示的数据模型。GEF为...

    界面设计GEF应用实例

    最后,可能会介绍事件处理和命令模式的应用,这些都是GEF中实现撤销/重做功能的关键。 GEF的核心概念包括: 1. **模型-视图-控制器(MVC)**:GEF基于MVC设计模式,模型存储图形数据,视图负责显示,控制器处理...

    GEF入门实例代码2《Eclipse插件开发》中实例

    GEF(Graphical Editing Framework)是Eclipse平台中的一个核心组件,主要用于构建图形化编辑工具。这个实例代码2是《Eclipse插件开发》教程中的一部分,旨在帮助初学者理解如何利用GEF来创建自定义的图形编辑器。在...

    Eclipse的GEF学习

    4. Command执行的结果会被记录在EditDomain的命令堆栈中,以支持撤销/重做功能。 5. 最终,模型的变化通过控制器传递给视图,实现视图的实时更新。 #### 四、GEF的优势及设计哲学 GEF的设计理念在于减少模型与视图...

    GEF教程及demo源码

    Command模块则实现了撤销/重做功能,使得用户操作可逆。Zest是GEF的图表库,提供了丰富的图表绘制和布局算法。 **2. GEF的基本元素** - **Figure**: 图形对象,是图形界面的基本单元,可以是线条、矩形、文本等。 ...

    GEF入门系列

    - **编辑领域(EditPart)**:编辑领域是GEF中的核心组件,它将模型与视图关联起来,实现了对图形元素的操作。 - **图形工厂(GraphicalFactory)**:用于创建图形元素的实例,如线条、形状等。 - **手势管理器...

    GEF学习资料.zip

    GEF(Graphical Editing Framework)是Eclipse项目中的一个核心组件,主要用于构建图形编辑框架。它为开发者提供了一套全面的工具,用于创建复杂的图形用户界面,特别适用于创建数据建模、流程设计、系统架构等领域...

    GEF-SDK-3.7.0

    **GEF(Graphical Editing Framework)** 是一个用于构建图形化编辑器的开源框架,它在Eclipse平台中被广泛使用。**GEF-SDK-3.7.0** 是这个框架的一个特定版本,提供了开发人员构建图形用户界面(GUI)和可视化编辑...

    IBM GEF 推广资料

    GEF的核心组件和依赖关系包括: 1. **交互层**:处理用户的各种操作,如移动、调整大小、创建、弯曲和连接元素。 2. **模型到视图映射**:确保图形视图与模型数据的一致性。 3. **工作台集成**:允许在Eclipse工作台...

    GEF- runtime

    **GEF(Graphical Editing Framework)运行时**是Eclipse平台中的一个重要组成部分,主要用于构建图形化编辑工具。在Eclipse插件开发中,GEF提供了一套完整的框架,帮助开发者轻松创建可交互的、基于图的用户界面。...

    GEF 入门教程

    4. **实现Viewer**: Viewer是GEF中的核心组件,它负责管理和协调EditParts,以及与用户交互。 5. **命令与手势**: 定义并实现Command,将用户在视图上的操作转化为可管理的命令,同时设置手势监听器以识别用户的...

    gef入门学习项目源码

    3. **适配器(Adapter)与扩展点(Extension Point)**:适配器用于不同组件之间的通信,而扩展点允许你自定义和扩展GEF的功能。 4. **图形布局(Layout)**:布局管理器负责调整图元的位置和大小,以保持图形界面...

    GEF-runtime-3.5.0.zip

    **GEF(Graphical Editing Framework)** 是一个用于构建图形化编辑器的开源框架,它在Eclipse平台中被广泛使用。标题中的“GEF-runtime-3.5.0.zip”是一个包含GEF运行时环境的压缩包,适用于开发和运行基于GEF的...

    用gef写的一个tree例子(无移动,删除)

    标题中的“用gef写的一个tree例子(无移动,删除)”指的是使用GEF(Graphical Editing Framework)框架创建了一个树形结构的示例项目,该示例不包含节点的移动或删除功能。GEF是Eclipse平台上的一个开源库,主要...

    eclipse_gef_example.rar

    这个部分主要展示了如何在GEF环境中处理文本。它涵盖了添加、编辑和格式化文本的基本功能,以及如何将文本与图形元素结合。开发者可以学习如何创建文本图形编辑部件,并理解文本编辑的事件处理机制。 2. **org....

    GEF入门系列 pdf 格式资料

    - **Eclipse Development using GEF and EMF.pdf**:这本教程可能涵盖了如何将GEF与EMF(Eclipse Modeling Framework)结合使用,EMF提供了一种模型驱动的方法来处理数据和业务逻辑,与GEF的图形编辑功能相辅相成。...

    eclipse gef 插件 最新版本

    GEF是Eclipse平台上的一个开源项目,它提供了用于构建图形编辑器的组件和API,使得开发者能够专注于业务逻辑,而无需从零开始实现图形渲染和交互。GEF遵循MVC(Model-View-Controller)架构,将数据模型、视图和...

Global site tag (gtag.js) - Google Analytics