跟着入门教程一步一步走下来,好歹有个可视化编辑器的样子,看起来还像那么回事。
回过头,发现添加的组件还没有删除功能。现在介绍一下如何实现组件删除的功能。
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操作。
分享到:
相关推荐
- `org.eclipse.gef.EditPart`:这是GEF的核心组件,它代表了图形模型中的一个元素,并负责将其映射到视图中。 - `org.eclipse.gef.GraphicalEditPart`:是EditPart的一个子类,专门处理图形元素的绘制和交互。 - `...
这个入门学习例子旨在帮助初学者理解GEF的基本用法和核心概念,通过实例展示如何利用GEF实现工具栏、菜单栏、属性栏以及图形的交互功能,如移动、删除、撤销、连线等,并涵盖了大纲视图和鹰眼功能的实现。...
GEF的核心功能是提供了一套强大的组件和API,用于创建可交互的、图形式的用户界面。通过使用GEF,开发者可以轻松地创建出具有拖放、连接线、节点和图形编辑功能的应用。在Java编程中,GEF是一个非常有价值的工具,...
GEF(Graphical Editing Framework)是Eclipse平台中的一个组件,主要用于创建图形化的编辑器。它提供了一套完整的框架,用于构建可扩展的、交互式的图形编辑应用程序,特别是针对那些需要可视表示的数据模型。GEF为...
最后,可能会介绍事件处理和命令模式的应用,这些都是GEF中实现撤销/重做功能的关键。 GEF的核心概念包括: 1. **模型-视图-控制器(MVC)**:GEF基于MVC设计模式,模型存储图形数据,视图负责显示,控制器处理...
GEF(Graphical Editing Framework)是Eclipse平台中的一个核心组件,主要用于构建图形化编辑工具。这个实例代码2是《Eclipse插件开发》教程中的一部分,旨在帮助初学者理解如何利用GEF来创建自定义的图形编辑器。在...
4. Command执行的结果会被记录在EditDomain的命令堆栈中,以支持撤销/重做功能。 5. 最终,模型的变化通过控制器传递给视图,实现视图的实时更新。 #### 四、GEF的优势及设计哲学 GEF的设计理念在于减少模型与视图...
Command模块则实现了撤销/重做功能,使得用户操作可逆。Zest是GEF的图表库,提供了丰富的图表绘制和布局算法。 **2. GEF的基本元素** - **Figure**: 图形对象,是图形界面的基本单元,可以是线条、矩形、文本等。 ...
- **编辑领域(EditPart)**:编辑领域是GEF中的核心组件,它将模型与视图关联起来,实现了对图形元素的操作。 - **图形工厂(GraphicalFactory)**:用于创建图形元素的实例,如线条、形状等。 - **手势管理器...
GEF(Graphical Editing Framework)是Eclipse项目中的一个核心组件,主要用于构建图形编辑框架。它为开发者提供了一套全面的工具,用于创建复杂的图形用户界面,特别适用于创建数据建模、流程设计、系统架构等领域...
**GEF(Graphical Editing Framework)** 是一个用于构建图形化编辑器的开源框架,它在Eclipse平台中被广泛使用。**GEF-SDK-3.7.0** 是这个框架的一个特定版本,提供了开发人员构建图形用户界面(GUI)和可视化编辑...
GEF的核心组件和依赖关系包括: 1. **交互层**:处理用户的各种操作,如移动、调整大小、创建、弯曲和连接元素。 2. **模型到视图映射**:确保图形视图与模型数据的一致性。 3. **工作台集成**:允许在Eclipse工作台...
**GEF(Graphical Editing Framework)运行时**是Eclipse平台中的一个重要组成部分,主要用于构建图形化编辑工具。在Eclipse插件开发中,GEF提供了一套完整的框架,帮助开发者轻松创建可交互的、基于图的用户界面。...
4. **实现Viewer**: Viewer是GEF中的核心组件,它负责管理和协调EditParts,以及与用户交互。 5. **命令与手势**: 定义并实现Command,将用户在视图上的操作转化为可管理的命令,同时设置手势监听器以识别用户的...
3. **适配器(Adapter)与扩展点(Extension Point)**:适配器用于不同组件之间的通信,而扩展点允许你自定义和扩展GEF的功能。 4. **图形布局(Layout)**:布局管理器负责调整图元的位置和大小,以保持图形界面...
**GEF(Graphical Editing Framework)** 是一个用于构建图形化编辑器的开源框架,它在Eclipse平台中被广泛使用。标题中的“GEF-runtime-3.5.0.zip”是一个包含GEF运行时环境的压缩包,适用于开发和运行基于GEF的...
标题中的“用gef写的一个tree例子(无移动,删除)”指的是使用GEF(Graphical Editing Framework)框架创建了一个树形结构的示例项目,该示例不包含节点的移动或删除功能。GEF是Eclipse平台上的一个开源库,主要...
这个部分主要展示了如何在GEF环境中处理文本。它涵盖了添加、编辑和格式化文本的基本功能,以及如何将文本与图形元素结合。开发者可以学习如何创建文本图形编辑部件,并理解文本编辑的事件处理机制。 2. **org....
- **Eclipse Development using GEF and EMF.pdf**:这本教程可能涵盖了如何将GEF与EMF(Eclipse Modeling Framework)结合使用,EMF提供了一种模型驱动的方法来处理数据和业务逻辑,与GEF的图形编辑功能相辅相成。...
GEF是Eclipse平台上的一个开源项目,它提供了用于构建图形编辑器的组件和API,使得开发者能够专注于业务逻辑,而无需从零开始实现图形渲染和交互。GEF遵循MVC(Model-View-Controller)架构,将数据模型、视图和...