我有一个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()
。
如果我在按下 CTRL 或 ALT 键的情况下拖动文件,我会得到"窗口复制"鼠标图标。删除工作,editorDropListener.drop()
成功调用。
我可以在哪里配置,允许哪种丢弃?
似乎这个问题还没有从上面解决。我只是查找了DND的ap并解决了这个问题,消除了Ctrl或Alt按。拖放我们只需要在编辑器区域放置适配器中添加一些代码:
@Override
public void dragEnter(DropTargetEvent event) {
// TODO Auto-generated method stub
event.detail = DND.DROP_COPY;
super.dragEnter(event);
}
event.detail 必须设置为 DND。DROP_COPY接受。
它比这稍微复杂一些,因为编辑器区域不接受 MOVE DND 请求。
有关详细信息,请查看org.eclipse.ui.internal.ide.EditorAreaDropAdapter
。
在侦听器中使用此代码。 它会起作用。
@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;
}
}
}