在项目浏览器中,我正在尝试实现一个自定义粘贴命令,我希望使用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方法中访问剪贴板。我在这里得到零。
答案 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;
}
您可能还需要检查FileTransfer
和TextTransfer
。