Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Eclipse插件-将文本从Java编辑器拖到自定义查看器上总是会得到空数据_Java_Eclipse_Eclipse Plugin_Drag And Drop_Swt - Fatal编程技术网

Eclipse插件-将文本从Java编辑器拖到自定义查看器上总是会得到空数据

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编辑器并将文本从一个拖动到另一个时,它工作得非常好。为什么将文本拖到视图上时它不起作用 在我的视图中,我覆盖

我在Eclipse上创建了一个自定义视图,并为其定义了一个拖放侦听器。当我使用TextTransfer作为机制将项目从视图拖到本机Java编辑器上时,文本成功粘贴到编辑器上

然而,当我尝试做相反的事情时,即当我从Java编辑器中选择一段文本并将其拖动到我的视图中时,光标会显示一个无效符号,并且拖放操作无法按预期进行。Drop目标还设置为接受TextTransfer实例

当我打开两个Java编辑器并将文本从一个拖动到另一个时,它工作得非常好。为什么将文本拖到视图上时它不起作用

在我的视图中,我覆盖了DropTargetAdapter的dragEnter函数,以检查是否检测到了阻力,并且它确实存在。在打印event.datatypes之后,我还可以看到支持的CF_文本类型。当我打印event.data时,它是空的。为什么?

代码如下:

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;
现在可以了