`
liugang594
  • 浏览: 985885 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

给GEF拖放功能

    博客分类:
  • GEF
 
阅读更多

我们知道SWT支持Native的拖放。GEF使用SWT的拖放来实现自己的拖放功能。不过不需要像SWT中需要定义DragSource和DropTarget。在GEF中,我们只需要继承AbstractTransferDragSourceListener来实现拖放源;继承AbstractTransferDropTargetListener来实现放置地。

 

这里以放置地为例!

 

首先,写一个继承类FileDropTargetListener,如下:

public class FileDropTargetListener extends AbstractTransferDropTargetListener {

	public FileDropTargetListener(EditPartViewer viewer, Transfer xfer) {
		super(viewer, xfer);
	}

	public FileDropTargetListener(EditPartViewer viewer) {
		super(viewer, FileTransfer.getInstance());
	}

	@Override
	protected void updateTargetRequest() {

	}
}

 

上面我们已经说过:GEF中的拖放是借助SWT中的拖放来实现的,而在SWT中,我们需要给出拖放所支持的Transfer的类型。所以需要注意的是,我们在构造函数中也要给出Transfer类型。

 

OK,接下来,我们首先要做的就是创建一个request。我们知道GEF中都是通过处理一个个request来完成model的修改的。我们的目的是每拖进一个文件,就在放置的位置点上创建一个Homuncule模型。

 

在FileDropTargetListener中,重写以下方法:

	@Override
	protected Request createTargetRequest() {
		CreateRequest request = new CreateRequest();
		request.setFactory(factory);
		return request;
	}

 

这里之所以需要一个CreateRequest,是因为在getCreateCommand(CreateRequest)中需要一个CreateRequest参数。

 

request中有五个set方法,不过这里我只需要setFactory(Factory)方法。这里的factory需要继承自:CreationFactory。

 

所以接下来实现我们的CreationFactory,如下:

public class HomunculeCreateFactory implements CreationFactory {

	String text;
	public Object getNewObject() {
		Homuncule homuncule = new Homuncule(ColorConstants.red,text);
		return homuncule;
	}

	public Object getObjectType() {
		return Homuncule.class;
	}

	public void setText(String text){
		this.text = text;
	}
}

 这里getNewObject()就返回一个新建的对象,我们知道通过在getCreateCommand()方法中,会调到request.getNewObject(),那个返回的对象就是这个factory中返回的对象。(不过在我的例子中其实可以不用的,因为我的对象是在command实现中自己构建的)

 

在FileDropTargetListener的createTargetRequest()方法中,用到了一个变量factory,现在我们就可以给出这个factory了,如下:

private HomunculeCreateFactory factory = new HomunculeCreateFactory();

 

 最后在我们的Editor的configureGraphicalViewer()中加上一条:

getGraphicalViewer().addDropTargetListener(
				new FileDropTargetListener(getGraphicalViewer()));

 

OK,我们已经完成了一个GEF拖放的实现。

 

补充:

 

你可以通过重写DragTarget里提供的那几个drop方法来修改你的拖放方式、拖放后的实现等等!

分享到:
评论

相关推荐

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

    通过使用GEF,开发者可以轻松地创建出具有拖放、连接线、节点和图形编辑功能的应用。在Java编程中,GEF是一个非常有价值的工具,因为它简化了图形界面的开发过程,使开发者可以专注于业务逻辑而不是底层的图形绘制。...

    GEF-ALL-3.7+GEF-ALL-3.8+GEF_Draw2d学习资料

    它的核心功能包括图形对象的创建、拖放操作、连接线的管理、以及各种图形编辑行为的实现。GEF-3.7和GEF-3.8是其不同版本,可能包含不同的特性和改进,例如性能优化、API调整或新功能的添加。 Draw2D则是一个底层的...

    GEF教程及demo源码GEF_RCP_DEMO.zip

    GEF_RCP_DEMO的源码包含了各种GEF特性的实例,如图元创建、连接线绘制、拖放操作等。通过分析这些示例代码,开发者可以更深入地理解GEF的工作原理,学习如何在实际项目中应用。 9. **调试与测试** 学习如何利用...

    GEF 可用的6个demo

    GEF为开发人员提供了丰富的工具和API,使得创建具有拖放功能、连接线、节点编辑等特性的图形编辑器变得相对容易。 在“GEF可用的6个demo”中,我们可以期待学习到以下关键知识点: 1. **基础架构**:GEF的核心组件...

    GEF Example Source Code

    **GEF(Graphical Editing Framework)** 是一个用于构建图形编辑工具的开源框架,它为开发人员提供了一套全面的库和工具,用于创建基于Eclipse的富客户端平台(RCP)的应用程序,特别是那些涉及图形用户界面(GUI)...

    GEF-Update-5.3.3.zip

    它提供了一套完整的框架,使得开发者能够快速开发出具有拖放、连接、缩放、旋转等功能的图形界面应用,尤其在创建模型驱动开发(MDD)工具时非常有用。`GEF-Update-5.3.3.zip`是针对Eclipse 4.18版本的一个离线更新...

    GEF初学者开发样例

    通过GEF,开发者可以快速实现图形的绘制、编辑操作、拖放功能以及自定义的图形布局。GEF不仅适用于开发简单的图形编辑器,还能够处理复杂的图表和流程图。 2. **GEF的核心组件** - **模型(Model)**: 模型负责...

    GEF_Tutorial.rar(GEF开发指南)

    GEF支持多种交互操作,如拖放、选择、复制、粘贴、撤销/重做等。这些功能可以通过实现特定的适配器和命令来添加到你的编辑器中。 **8. 示例项目** "emf&gef.pdf"和"GEF_Tutorial.pdf"这两份文档很可能包含了详细的...

    GEF 入门教程 中文版

    1. **定义拖放行为**:使用GEF提供的拖放API来定义拖放行为。 2. **处理拖放事件**:实现事件处理器来响应拖放过程中的各种事件。 3. **更新模型**:确保拖放操作能够正确地更新模型状态。 #### 十三、剪切和粘贴 ...

    GEF-SDK-3.7.0

    3. **手势与命令**:通过定义手势和命令,GEF支持用户通过鼠标或键盘进行图形操作,如拖放、缩放、旋转等。 4. **Zest图表库**:GEF通常与Zest图表库结合使用,Zest提供了丰富的图表类型,如树状图、网络图等,增强...

    GEF-SDK-3.6.2 jar

    在Android ADT中,GEF的作用主要体现在可视化布局编辑器上,它允许开发者通过拖放的方式设计XML布局文件,实时预览UI效果,以及方便地调整控件的属性和布局关系。此外,GEF还支持图元工厂(MetaFactory),可以生成...

    GEF-SDK-3.3.1.zip

    GEF提供了构建可视化编辑器的框架,使得开发者能够快速地开发出具有拖放、连接线、层次结构等图形交互功能的应用程序。 标题中的"GEF-SDK-3.3.1.zip"指的是GEF的软件开发工具包(SDK)的3.3.1版本,这是一个压缩包...

    基于gef框架Demo

    在“基于gef框架Demo”中,你可以期待看到如何使用Gef来创建基本的图形元素,如节点和边,以及如何实现拖放、连接和撤销/重做功能的示例。此外,可能还会有关于自定义图元工厂和适配器以扩展框架功能的演示。通过...

    eclipse及gef相关文档

    3. **编辑操作**:讨论GEF提供的编辑操作,如拖放、复制粘贴、撤销重做等,以及如何自定义编辑行为。 4. **模型-视图-控制器模式**:阐述如何在GEF中实现MVC模式,保持模型与视图之间的同步。 5. **Zest图表库**:...

    org.eclipse.gef

    它允许开发者创建复杂的图形编辑器,支持拖放操作、模型-视图-控制器(MVC)架构以及丰富的图形交互功能。 【描述】"Eclipse的GEF插件,GEF-ALL-3.5.0.zip" 提到的是一个特定版本的 GEF 插件——3.5.0 版本。这个...

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

    在Eclipse插件开发中,GEF提供了一套强大的框架,使得开发者可以方便地构建出功能丰富的图形用户界面(GUI),特别是用于绘制图表、流程图等可视化编辑场景。 1. **GEF基本概念** GEF包含了一系列的类和接口,如...

    GEF开发指南

    GEF指南还详细讲解了拖放(Drag and Drop, DnD)、剪切和粘贴(Cut and Paste)操作,这些是图形编辑过程中常见且重要的功能。同样,连线(Connection)、直接编辑(Direct Edit)、变更标记(Dirty)等更高级的功能...

    GEF 入门版中文教程 源码

    4. **命令(Command)**:GEF中的命令模式用于封装对模型的修改操作,使得撤销/重做功能得以实现。命令对象记录了更改前后的状态,便于执行回滚或重复操作。 5. **图元(Figure)**和**绘图(Drawing)**:GEF通过SWT...

    EMF_GEF_入门系列

    此外,GEF还提供了拖放、连接、缩放、旋转等图形交互功能。开发者可以通过实现GEF提供的接口和回调方法,轻松地定制自己的图形编辑器,用于创建流程图、网络拓扑图、UML模型等各种图形表示。 本入门系列将涵盖以下...

    GEF-runtime-3.5.0.zip

    它支持基本图形元素如形状、连接线以及高级功能如拖放、缩放、旋转等。GEF允许开发者通过定义模型、视图和控制器来实现MVC设计模式,从而将业务逻辑与用户界面分离。 **2. GEF的组成部分:** - **DirectEdit**: ...

Global site tag (gtag.js) - Google Analytics