[英]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.