Eclipse插件-将文本从Java编辑器拖到自定义查看器上总是会得到空数据
我在Eclipse上创建了一个自定义视图,并为其定义了一个拖放侦听器。当我使用TextTransfer作为机制将项目从视图拖到本机Java编辑器上时,文本成功粘贴到编辑器上 然而,当我尝试做相反的事情时,即当我从Java编辑器中选择一段文本并将其拖动到我的视图中时,光标会显示一个无效符号,并且拖放操作无法按预期进行。Drop目标还设置为接受TextTransfer实例 当我打开两个Java编辑器并将文本从一个拖动到另一个时,它工作得非常好。为什么将文本拖到视图上时它不起作用 在我的视图中,我覆盖了DropTargetAdapter的dragEnter函数,以检查是否检测到了阻力,并且它确实存在。在打印event.datatypes之后,我还可以看到支持的CF_文本类型。当我打印event.data时,它是空的。为什么? 代码如下:Eclipse插件-将文本从Java编辑器拖到自定义查看器上总是会得到空数据,java,eclipse,eclipse-plugin,drag-and-drop,swt,Java,Eclipse,Eclipse Plugin,Drag And Drop,Swt,我在Eclipse上创建了一个自定义视图,并为其定义了一个拖放侦听器。当我使用TextTransfer作为机制将项目从视图拖到本机Java编辑器上时,文本成功粘贴到编辑器上 然而,当我尝试做相反的事情时,即当我从Java编辑器中选择一段文本并将其拖动到我的视图中时,光标会显示一个无效符号,并且拖放操作无法按预期进行。Drop目标还设置为接受TextTransfer实例 当我打开两个Java编辑器并将文本从一个拖动到另一个时,它工作得非常好。为什么将文本拖到视图上时它不起作用 在我的视图中,我覆盖
viewDropTargetAdapter = new DropTargetAdapter()
{
@Override
public void drop(DropTargetEvent event)
{
addCodeSnippetAction.run();
}
@Override
public void dragEnter(DropTargetEvent event)
{
System.out.println("DATATYPE: " + event.currentDataType);
System.out.println("DATA: " + event.data);
System.out.println("DETAIL: " + event.detail);
TransferData[] td = event.dataTypes;
for(int i=0; i<td.length; i++)
{
System.out.println("Datatype of " + i + " is: " + td[i].type + " and " +getNameFromId(td[i].type));
}
super.dragEnter(event);
}
};
viewDropTarget = new DropTarget(viewer.getControl(), DND.DROP_COPY);
viewDropTarget.setTransfer(new Transfer[] {TextTransfer.getInstance()});
viewDropTarget.addDropListener(viewDropTargetAdapter);
DATATYPE: org.eclipse.swt.dnd.TransferData@77f5c2c7
DATA: null
DETAIL: 0
Datatype of 0 is: 13 and CF_UNICODETEXT
Datatype of 1 is: 1 and CF_TEXT
经过一些研究,我意识到有必要在DragEnter函数中手动设置event.detail变量。添加行后:
event.detail = DND.DROP_COPY;
现在可以了