2012-05-07 4 views
0

Мне нужно перетащить значение таблицы TableViewer в другую таблицуViewView в swt. Мне нужно удалить это значение, где я перетащил и добавил это значение, где я упал в tableViewer, я могу перетаскивать, но не могу отбросить то, где я тоже хочу, и не могу удалить и добавить значение, когда я перетаскиваю TableViewer. Вот у меня есть: Спасибо заранее за помощь.Перетаскивание для tableviewer в SWT

public void DragandDrop(){ 

    Transfer[] types = new Transfer[] { TextTransfer.getInstance() }; 

    DragSource source = new DragSource(table_2, DND.DROP_MOVE | DND.DROP_COPY); 
    source.setTransfer(types); 
    source.addDragListener(new DragSourceAdapter() { 
     public void dragSetData(DragSourceEvent event) { 
     DragSource ds = (DragSource) event.widget; 
     Table table = (Table) ds.getControl(); 
     TableItem[] selection = table.getSelection(); 

     StringBuffer buff = new StringBuffer(); 
     for (int i = 0, n = selection.length; i < n; i++) { 
      buff.append(selection[i].getText()); 
     } 
     event.data = buff.toString(); 
     } 
    }); 

    DropTarget target = new DropTarget(table_3, DND.DROP_MOVE | DND.DROP_COPY); 
    target.setTransfer(types); 
    target.addDropListener(new DropTargetAdapter() { 
     public void dragEnter(DropTargetEvent event) { 
     if (event.detail != DND.DROP_DEFAULT) { 
      event.detail = (event.operations & DND.DROP_COPY) != 0 ? DND.DROP_COPY : DND.DROP_NONE; 
     } 
     for (int i = 0, n = event.dataTypes.length; i < n; i++) { 
      if (TextTransfer.getInstance().isSupportedType(event.dataTypes[i])) { 
      event.currentDataType = event.dataTypes[i]; 
      } 
     } 
     } 

     public void dragOver(DropTargetEvent event) { 
     event.feedback = DND.FEEDBACK_SELECT | DND.FEEDBACK_SCROLL; 
     } 

     public void drop(DropTargetEvent event) { 
     if (TextTransfer.getInstance().isSupportedType(event.currentDataType)) { 
      DropTarget target = (DropTarget) event.widget; 
      Table table = (Table) target.getControl(); 
      String data = (String) event.data; 

      TableItem item = new TableItem(table, SWT.NONE); 
      item.setText(new String[] { data }); 
     // table.redraw(); 
     } 
     } 
    }); 
} 

ответ

0

удалить выбранное значение, которое вы можете использовать следующие

public void drop(DropTargetEvent event) { 
if (TextTransfer.getInstance().isSupportedType(event.currentDataType)) { 
DropTarget target = (DropTarget) event.widget; 
    Table table = (Table) target.getControl(); 
    String data = (String) event.data; 
    TableItem item = new TableItem(table, SWT.NONE); 
    item.setText(new String[] { data }); 
    //remove the tableitem you drag 
    table.remove(table.getSelectionIndex()); 
} 
0

Я искал Перетаскивание на TableViewer и нашел решение. Надеюсь, все понимают легко. В моем случае я создал два новых класса наследования Listener от DragSourceListener & DropTargetListener. Потому что я хочу использовать функции TableViewer. Вам нужно три вещи.

Сначала сохраните индекс элемента источника от void dragStart(DragSourceEvent event),

Секунды набор данных в event.data и

Тогда Последний нашел целевой показатель от void drop(DropTargetEvent event).

public class TestClass extends TableViewer { 

private int sourceIndex; 

priavte class DragListener implements DragSourceListener { 
    private TableViewer viewer; 

    public ItemDragListener(TableViewer viewer) { 
     this.viewer = viewer; 
    } 

    public void dragStart(DragSourceEvent event) { 
     sourceIndex = viewer.getTable().getSelectionIndex(); 
    } 

    public void dragSetData(DragSourceEvent event) { 
     // save data 
     ISelection select = viewer.getSelection(); 
     if (select instanceof IStructuredSelection) { 
      Object item = (Object) ((IStructuredSelection)select).getFirstElement(); 
      // save item to event.data 
      event.data = ......... 
    } 
    : 
} 

private class ItemDropListener implements DropTargetListener { 
    TableViewer viewer; 

    public ItemDropListener(TableViewer viewer) { 
     this.viewer = viewer; 
    } 

    public void drop(DropTargetEvent event) { 
     if (TextTransfer.getInstance().isSupportedType(event.currentDataType)) { 
      TableItem item = (TableItem)event.item; 
      int targetIndex= -1; 
      if (item != null) { 
      Table table = item.getParent(); 
      targetIndex= table.indexOf(item); 
      } 
      String data = (String) event.data; 

      // add an item 
      if (targetIndex >= 0) 
      viewer.insert((Object)data, targetIndex); 
      else 
      viewer.add((Object)data); 

      // remove an item 
      viewer.getTable().remove(sourceIndex); // Careful, it can be changed after add an item 
     } 
     } 

public void init() { 
    Transfer[] transfers = new Transfer[] { TextTransfer.getInstance() }; 
    this.addDragSupport(DND.DROP_COPY | DND.DROP_MOVE, transfers, new ItemDragListener(this)); 
    this.addDropSupport(DND.DROP_COPY | DND.DROP_MOVE, transfers, new ItemDropListener(this)); 
} 

}