【问题标题】:Drag and drop from View to GEF Editor从视图拖放到 GEF 编辑器
【发布时间】: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 AskMCVE,以获取有关如何使您的问题变得更好的更多解释和提示。如果仍有不清楚的地方,请随时回复此评论。在评论中加@Palec通知我,否则我不知道你回复了。祝你有美好的一天。

标签: java drag-and-drop eclipse-rcp eclipse-gef eclipse-gmf


【解决方案1】:

我想通了。

问题是,必须在特定的AbstractGraphicalEditPart 中安装XYPolicy

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多