2

我有一个 Eclipse RCP 应用程序,它应该通过从 Windows 资源管理器中拖放来打开文件。所以我实现了这个:

public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor {

    @Override
    public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
        configurer.addEditorAreaTransfer(FileTransfer.getInstance());
        configurer.configureEditorAreaDropListener(editorDropListener);
        return new ApplicationWorkbenchWindowAdvisor(configurer);
    }
[...]
}

editorDropListener是类型DropTargetAdapter并实现该drop()方法。

现在,如果我将文件从资源管理器拖到我的应用程序中,我会看到“Windows 不可用”鼠标图标,并且拖放将不起作用。editorDropListener.drop()没有调用。

如果我按下CTRLALT键拖动文件,我会得到“windows copy”鼠标图标。drop 工作并editorDropListener.drop()成功调用。

我在哪里可以配置,允许哪种丢弃?

4

3 回答 3

1

看来这个问题还没有从上面解决。我刚刚查找了DND的api并解决了这个问题,消除了Ctrl或Alt键。 拖放 我们只需要在 EditorAreaDropAdapter 中添加一些代码:

        @Override
public void dragEnter(DropTargetEvent event) {
    // TODO Auto-generated method stub
    event.detail = DND.DROP_COPY;
    super.dragEnter(event);
}

event.detail 必须设置为 DND.DROP_COPY 才能接受。

于 2014-05-15T09:11:31.997 回答
0

它比这更复杂一些,因为编辑器区域不接受 MOVE DND 请求。

看看org.eclipse.ui.internal.ide.EditorAreaDropAdapter细节。

于 2012-04-21T09:36:24.423 回答
0

在您的侦听器中使用此代码。它会起作用的。

                @Override
        public void dragEnter(final DropTargetEvent event) {

            if (event.detail == DND.DROP_DEFAULT) {
                if ((event.operations & DND.DROP_COPY) != 0) {
                    event.detail = DND.DROP_COPY;
                } else {
                    event.detail = DND.DROP_NONE;
                }
            }
        }
于 2016-03-23T07:54:38.213 回答