[英]Eclipse Plugin - Dragging text from Java editor onto custom viewer always gets null data
我已经在Eclipse上创建了一个自定义视图,并为其定义了一个拖放侦听器。 当我将视图中的项目拖到本机Java编辑器上(使用TextTransfer作为机制)时,文本成功粘贴到了编辑器上。
但是,当我尝试相反的操作时,即当我从Java编辑器中选择一段文本并将其拖到我的视图中时,光标将显示一个无效的符号,并且按预期的方式无法正常工作。 放置目标也设置为接受TextTransfer实例。
当我打开两个Java编辑器并将文本从一个拖到另一个时,它可以完美地工作。 将文本拖到视图上时为什么不起作用?
我在视图中覆盖了DropTargetAdapter的dragEnter函数,以检查是否已检测到拖动。 打印event.datatypes之后,我还可以看到支持CF_TEXT类型。 当我打印event.data时,它为null。 为什么?
代码如下:
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;
现在有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.