簡體   English   中英

Eclipse插件-將文本從Java編輯器拖到自定義查看器中始終會得到空數據

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM