Java 不接受来自外部资源管理器的Eclipse RCP放置文件

Java 不接受来自外部资源管理器的Eclipse RCP放置文件,java,drag-and-drop,eclipse-rcp,Java,Drag And Drop,Eclipse Rcp,我有一个EclipseRCP应用程序,它应该通过windows资源管理器中的拖放打开文件。所以我实施了这个: public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor { @Override public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {

我有一个EclipseRCP应用程序,它应该通过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()

如果我在按住CTRL或ALT键的情况下拖动文件,我会得到“windows复制”鼠标图标。drop可以工作,并且成功调用了
editorDropListener.drop()


我可以在哪里配置,允许哪种类型的删除?

比这稍微复杂一些,因为编辑器区域不接受移动DND请求


有关详细信息,请查看
org.eclipse.ui.internal.ide.EditorAreaDropAdapter

这个问题似乎还没有从上面得到解决。我只需要查找DND的API并解决这个问题,消除Ctrl或Alt键。 我们只需要在EditorReadRopAdapter中添加一些代码:

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

event.detail必须设置为DND.DROP\u COPY才能接受。

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

                @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;
                }
            }
        }

谢谢你。最后,我想区分按住shift键或ctrl键进行拖动与否。因此,我总是找到将任何拖放事件硬编码为副本的实现,以使其与eclipse一起工作。所以它是编辑器,我必须“配置”它以接受比复制更多的内容:)谢谢你的回复。不幸的是,我不再处理这个问题,所以我不能确认这是正确的答案。其他人能做到吗?