【发布时间】:2014-02-10 18:42:53
【问题描述】:
我有一个简单的 View 和一个代表 POJO 的 TreeViewer。
我需要将 TreeItems 从视图中拖放到 GEF 编辑器(在多页编辑器中)。
当我将项目从查看器拖到编辑器区域时,在侦听器中调用创建请求、处理拖动和更新请求方法。
但是当我删除项目时,handleDrop/drop 不会被调用。
我的View 包含:
Transfer[] types = new Transfer[]{TextTransfer.getInstance()};
treeViewer.addDragSupport(DND.DROP_MOVE, types, new InstructionDragListener(treeViewer));
DragListener 看起来像:
public class InstructionDragListener implements DragSourceListener {
private Viewer viewer;
public InstructionDragListener(Viewer viewer) {
this.viewer = viewer;
}
@Override
public void dragStart(DragSourceEvent event) {
System.out.println("start");
event.doit = true;
}
@Override
public void dragSetData(DragSourceEvent event) {
IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
Instruction ins=null;
if (selection.getFirstElement() instanceof Instruction)
ins = (Instruction) selection.getFirstElement();
event.data= ins.getID();
System.out.println("data");
}
@Override
public void dragFinished(DragSourceEvent event) {
System.out.println("end");
}
}
编辑器是MultiPageEditor 的一部分,看起来像:
public class MyGraphicalEditor extends GraphicalEditorWithFlyoutPalette {
public static String ID = "MyEditorID";
public MyGraphicalEditor() {
setEditDomain(new DefaultEditDomain(this));
}
@Override
protected void initializeGraphicalViewer() {
super.initializeGraphicalViewer();
getGraphicalViewer().setContents(ProjectManager.getInstance().getTestCaseTest());
}
@Override
protected void configureGraphicalViewer() {
super.configureGraphicalViewer();
getGraphicalViewer().setEditPartFactory(new TestCaseEditPartFactory());
getGraphicalViewer().addDropTargetListener(new MyTransferTargetDropListener(getGraphicalViewer()));
}
}
DropListener 看起来像:
public class MyTransferTargetDropLsitener extends AbstractTransferDropTargetListener {
private MyTransferTagetDropFactory factory = new MyTransferTagetDropFactory();
public MyTransferTargetDropLsitener(EditPartViewer viewer, Transfer xfer) {
super(viewer, xfer);
}
@Override
protected Request createTargetRequest() {
System.out.println("CREATE REQUEST");
CreateRequest request = new CreateRequest();
request.setFactory(factory);
return request;
}
protected void handleDragOver() {
System.out.println("HANDLE DRAG");
super.handleDragOver();
}
@Override
protected void updateTargetRequest() {
System.out.println("UPDATE REQUEST");
System.out.println(getDropLocation().toString());
((CreateRequest)getTargetRequest()).setLocation(getDropLocation());
}
@Override
protected void handleDrop() {
System.out.println("DROP HANDLED");
super.handleDrop();
}
@Override
public void drop(DropTargetEvent event) {
System.out.println("DROPPED");
super.drop(event);
}
}
我错过了什么?
【问题讨论】:
-
欢迎来到 SO!我编辑了您的问题,以便有更好的机会得到回答。请查看编辑并参考帮助中的How to Ask 和MCVE,以获取有关如何使您的问题变得更好的更多解释和提示。如果仍有不清楚的地方,请随时回复此评论。在评论中加
@Palec通知我,否则我不知道你回复了。祝你有美好的一天。
标签: java drag-and-drop eclipse-rcp eclipse-gef eclipse-gmf