2015-10-21 88 views
0

我應該實現拖放到網格窗口小部件上的功能...我找到了監聽器「DragdetectListener」,但我不知道如何找到目標(這是我必須發佈的目標線)。一些想法?我不能使用表格,我必須使用swt網格。更清楚: 我有一個n行的網格,應該在其他兩行之間拖動它們之一。在這一點上,我應該知道我已經移動的線(這不是問題),以及第二條線(上述兩條線之間)。我如何獲得第二條線?謝謝大家的幫助。在SWT Grid上拖放

+0

我找不到在默認的SWT窗口小部件設置一個'Grid'部件。你是指[星雲網格](https://eclipse.org/nebula/widgets/grid/grid.php)? – Baz

+1

這篇文章解釋了DnD如何在SWT中工作:https://eclipse.org/articles/Article-SWT-DND/DND-in-SWT.html –

+0

@AndreaVicari如果您覺得答案可以解決問題,請標記點擊綠色複選標記即可「接受」。這有助於將重點放在仍然沒有答案的舊帖子上。 –

回答

1

拖放應該涉及兩個監聽器。 一個用於啓動拖動的組件,另一個用於完成拖放的組件。

source.addDragListener(new DragSourceListener() { 
    public void dragStart(DragSourceEvent event) { 
     // Only start the drag if needed 
     if (iDoNotNeedToStartTheDrag) { 
      event.doit = false; 
     } 
    } 
    public void dragSetData(DragSourceEvent event) { 
    // Provide the data of the requested type. 
    if (TextTransfer.getInstance().isSupportedType(event.dataType)) { 
      event.data = "the data to transfert"; 
    } 
    } 
    public void dragFinished(DragSourceEvent event) { 
    // At the end of the drag, if we need to do something on the source 
    } 
}); 

然後在目標:

target.addDropListener(new DropTargetListener() { 
    public void dragEnter(DropTargetEvent event) { 
    } 
    public void dragOver(DropTargetEvent event) { 
    } 
    public void dragOperationChanged(DropTargetEvent event) { 
    } 
    public void dragLeave(DropTargetEvent event) { 
    } 
    public void dropAccept(DropTargetEvent event) { 
    } 
    public void drop(DropTargetEvent event) { 
     // do what ever you want... 
     if (textTransfer.isSupportedType(event.currentDataType)) { 
      String text = (String)event.data; 
      TableItem item = new TableItem(dropTable, SWT.NONE); 
      item.setText(text); 
     } 
     if (fileTransfer.isSupportedType(event.currentDataType)){ 
      String[] files = (String[])event.data; 
      for (int i = 0; i < files.length; i++) { 
       TableItem item = new TableItem(dropTable, SWT.NONE); 
       item.setText(files[i]); 
      } 
     } 
    } 
}); 
+1

完美,非常感謝。 –