本文来自刘刚的博客
我们知道SWT支持Native的拖放。GEF使用SWT的拖放来实现自己的拖放功能。不过不需要像SWT中需要定义DragSource和DropTarget。在GEF中,我们只需要继承AbstractTransferDragSourceListener来实现拖放源;继承AbstractTransferDropTargetListener来实现放置地
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示例程序。 在这个demo中你可以看到以下的功能: 1. 往画布上添加多种节点 2. 节点之间的连线 3. 节点内容的编辑功能 4. 删除连线 5. 删除节点 6. 对节点的拖动以改变...
我下的资源的打包,希望有帮助,包括:GEF_Tutorial,GEF实例,入门教程,GEF-whole-upload
GEF: Graphical Editing Framework <br>GEF是一套MVC Framework,它能帮你比较容易的建立图形化的编辑器,V(View)的部分常常是基于SWT的Draw2D,因此Draw2D也看作是GEF的一部分。依赖:org.eclipse.gef***, org...
GEF简易教程-学习GEF的入门教程,不错的gef入门教程
RCP与GEF的课件,简单的介绍了RCP和GEF中的各组件的功能,已经工作流程
gef 绘图折线的实现方法。 gef API chm 格式
GEF-ALL-3.7 GEF-ALL-3.8 官方包。 GEF Draw2d 学习资料
GEF入门系列,八进制 的GEF入门系列教程, 由社区经作者授权后整理而成GEF(Graphical Editor Framework)是一个图形化编辑框架,它允许开发人员以图形化的方式展示和编辑模型,从而提升用户体验。这样的应用程序有很...
GEF eclipse 插件
GEF-II电场仪使用手册
一本很好的GEF入门教程,通过实例详细的描述了GEF开发的全流程。
GEF的优势是提供了标准的MVC(Model-View-Control)结构,开发人员可以利用GEF来完成以上这些功能,而不需要自己重新设计。与 其他一些MVC编辑框架相比,GEF的一个主要设计目标是尽量减少模型和视图之间的依赖,...
GEF.rar GEF.rar GEF.rar
这是我自己在学习GEF的时候做的一些总结。 1、GEF中的概念比如Command,Tool,Request等等。 2、GEF中使用到的几种设计模式。 3、GEF中对鼠标键盘事件处理的机制、流程。
Agenda Start things off What is GEF? GEF Demo Draw2d Overview Example GEF Overview Break Hands-on Activity: Shapes Example
GEF理解之第三部分,学习gef必备文档资料啊,值得下载
GEF理解之第一部分,学习gef必备文档资料啊,值得下载
Eclipse插件GEF的介绍,对于学习GEF有很大帮助
Gef入门开发,详细解析。 Gef入门开发,详细解析 Gef入门开发,详细解析