0

我需要将 tableViewer 单元格值拖动到 swt 中的另一个 tableViewer 单元格。我需要删除我拖放的那个值并添加那些我在 tableViewer 中拖放的值. 这是我所拥有的:提前感谢您的帮助。

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();
        }
      }
    });
}
4

2 回答 2

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());
 }   
于 2012-08-29T08:56:09.217 回答
0

我在 TableViewer 上寻找拖放并找到了解决方案。希望大家容易理解。我的情况是,我从 DragSourceListener 和 DropTargetListener 创建了两个新的 Listener 类继承。因为我想使用 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));
}

}
于 2016-11-17T17:09:21.303 回答