【问题标题】:Is there any way to drag from grid table viewer and drop it to nat table有什么方法可以从网格表查看器中拖放到 nat 表中
【发布时间】:2020-02-22 12:20:45
【问题描述】:

我在 GridTable 查看器中添加了 DragListener,在 nat 表中添加了 DropListener,但是当我选择任何行网格查看器并将其拖放到 nat table 时;选定的数据没有被删除 下面附上代码sn-p

在 GridTableViewer 中拖动源监听器

Transfer[] transferTypes = new Transfer[] { LocalSelectionTransfer.getTransfer() };

this.gridTableViewer.addDragSupport(DND.DROP_COPY | DND.DROP_MOVE, transferTypes, new DragSourceListener() {

      @Override
      public void dragStart(final DragSourceEvent event) {
        System.out.println(transferTypes);
        event.doit = !ShowListDialog.this.gridTableViewer.getStructuredSelection().isEmpty();
    }

      @Override
      public void dragSetData(final DragSourceEvent event) {
        if(LocalSelectionTransfer.getTransfer().isSupportedType(event.dataType)) {
           LocalSelectionTransfer.getTransfer()
 .setSelection(ShowListDialog.this.gridTableViewer.getStructuredSelection());
           LocalSelectionTransfer.getTransfer().setSelectionSetTime(event.time & 0xFFFF);
        }
      }

      @Override
      public void dragFinished(final DragSourceEvent dragsourceevent) {
        // LocalSelectionTransfer.getTransfer().setSelection(null);
        // LocalSelectionTransfer.getTransfer().setSelectionSetTime(0);
      }
    });

NatTable 中的 DropTargetListener

Transfer[] transferTypes = new Transfer[] { LocalSelectionTransfer.getTransfer() };

this.natTable.addDropSupport(DND.DROP_COPY | DND.DROP_MOVE, transferTypes, new DropTargetListener() {

      @Override
      public void dragEnter(final DropTargetEvent event) {
        event.detail = DND.DROP_COPY | DND.DROP_MOVE;
        event.currentDataType = event.dataTypes[0];
      }

      @Override
      public void dragOperationChanged(final DropTargetEvent arg0) {
        // TODO Auto-generated method stub
      }

      @Override
      public void dragOver(final DropTargetEvent event) {
        event.detail = DND.DROP_COPY | DND.DROP_MOVE;
      }

      @Override
      public void drop(final DropTargetEvent event) {
        StructuredSelection structuredSelection = (StructuredSelection) event.data;
        final Object selectedElement = structuredSelection.getFirstElement();
        // for (Object selectedElement : structuredSelection.toList()) {
        if (selectedElement instanceof String) {

        }
      }

      @Override
      public void dropAccept(final DropTargetEvent event) {

      }

      @Override
      public void dragLeave(final DropTargetEvent droptargetevent) {
        // TODO Auto-generated method stub

      }
    });

【问题讨论】:

    标签: java eclipse-rcp nattable


    【解决方案1】:

    LocalSelectionTransfer 的 Javadoc 以某种方式解释了这一点:

    选择可以直接在 DropTargetListener 中使用。 dropAccept 方法。传递给 dropAccept 的 DropTargetEvent 不包含 掉落数据。

    因此,与其尝试从DropTargetEvent 检索选择,您需要像这样直接访问LocalSelectionTransfer

    LocalSelectionTransfer transfer = LocalSelectionTransfer.getTransfer();
    IStructuredSelection selection = (IStructuredSelection) transfer.getSelection();
    

    【讨论】:

    • 谢谢,但即使从本地选择转移中检索选择也不起作用
    • 在从表格查看器中拖动任何项目时,只会调用 dragStart() 方法,除了没有调用来自任何一个侦听器 DragListener 和 DropListener 的其他方法。
    • 启动拖动的网格表查看器是通过右键单击 nat 表中的行创建的。当我从树查看器中拖动不在 nat 表内的任何项目时,相同的拖放侦听器工作
    • 我不明白为什么会这样?
    • 也许 DND.DROP_MOVE 是个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多