Eclipse:如何使用eclipse复制将项目资源管理器的内容复制到剪贴板

时间:2014-09-23 10:07:56

标签: eclipse command contextmenu

在项目浏览器中,我正在尝试实现一个自定义粘贴命令,我希望使用eclipse复制将内容复制到剪贴板,然后在我的自定义粘贴命令中访问它。复制后,我试图从剪贴板中获取内容,但剪贴板是空的。

我尝试使用与Eclipse Copy命令相同的命令ID添加copy的处理程序,但是我得到了冲突的处理程序错误。

重用eclipse命令id和这些命令的处理程序的正确方法是什么?

这是代码

对于我的自定义粘贴,我没有使用来自eclipse的粘贴,我通过添加新命令创建了一个新的上下文菜单粘贴对象。 我已经为扩展AbstractHandler的命令添加了处理程序:PasteObjectsHandler。

命令

  <command
        categoryId="org.eclipse.ui.category.edit"
        description="%pasteobjectscommand.description_xmsg"
        id="com.test.pasteobjectscommand"
        name="%pasteobjectscommand.name_xtit">
    </command>

处理程序

   <handler
        class="com.test.PasteObjectsHandler"
        commandId=" com.test.pasteobjectscommand "> 
    </handler>

处理程序类

   public class PasteObjectsHandler extends AbstractHandler {

    @Override
    public Object execute(ExecutionEvent event) {


    Clipboard clipBoard = new Clipboard(Display.getDefault());
    LocalTransfer instance = LocalTransfer.getInstance();
    IResource clipboardData = (IResource) clipBoard.getContents(instance);

}

在处理程序中,我尝试在execute方法中访问剪贴板。我在这里得到零。

1 个答案:

答案 0 :(得分:0)

在粘贴处理程序中,您应该使用以下内容:

TransferData[] availableTypes = clipboard.getAvailableTypes();

Transfer transfer = ResourceTransfer.getInstance();

if (isAvailable(transfer, availableDataTypes)) {
   return (IResource[])clipboard.getContents(transfer);
}


private static boolean isAvailable(Transfer transfer, TransferData[] availableDataTypes) {
    for (int i= 0; i < availableDataTypes.length; i++) {
        if (transfer.isSupportedType(availableDataTypes[i])) return true;
    }
    return false;
}

您可能还需要检查FileTransferTextTransfer