【问题标题】:TreeViewer selections and the ClipboardTreeViewer 选择和剪贴板
【发布时间】:2011-12-14 18:03:15
【问题描述】:

是否可以将多个对象(代表TreeViewer 选择)放入剪贴板?这是我的剪辑代码。

static public void Cut(EssentialData dataInst)
{
    IStructuredSelection selection = (IStructuredSelection)dataInst.getTreeViewer().getSelection();

    if(selection == null)
    {
        System.err.println("selection received was null");
        return;
    }

    Object[] objects = selection.toArray();

    //because setContents requires a Transfer object for every object sent
    List<Transfer> typesList = new ArrayList<>();

    for(int i = 0; i < objects.length; i++)
        typesList.add(FileEntryTransfer.getInstance());

    final Clipboard cb = new Clipboard(Display.getCurrent());
    cb.setContents(objects, typesList.toArray(new Transfer[]{}));
    cb.dispose();

    for(int i = 0; i < objects.length; i++)
        dataInst.getFileManager().removeEntry((FileEntry)objects[i]);

    dataInst.getTreeViewer().refresh(false);
}

我要做的是将多个选择(FileEntry 的实例)放入剪贴板。

FileEntryTransfer 是我的自定义 ByteArrayTransfer 类,我也用于 DND。它运行良好,但我注意到 setContents() 实际上只向它发送一个 FileEntry 对象,而不是一组对象(这是我想要的)。

有什么想法吗?

[edit]感谢 vanaprogeja,我解决了它

cb.setContents(new Object[]{ objects }, new Transfer[] { FileEntryTransfer.getInstance() });

【问题讨论】:

  • 您可以使用单独的剪贴板对象吗?对不起,我没有这方面的经验,只是把它扔在那里。
  • 为每个对象调用 setContents()?不,它不是那样工作的; setContents() 替换剪贴板中的任何内容。

标签: java swt jface


【解决方案1】:

怎么样:

cb.setContents(new Object[]{ objects },
    new Transfer[] { FileEntryTransfer.getInstance() });

【讨论】:

  • 语法错误,但这绝对让我走上了正轨。我刚刚用 cb.setContents(new Object[]{ objects }, new Transfer[] { FileEntryTransfer.getInstance() });
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-28
相关资源
最近更新 更多