在我的@execute方法中,我可以从剪贴板/ LocalSelectionTransfer中选择。但我不知道如何根据用户将内容放入剪贴板的方式做出反应。 我必须决定是否复制内容。 这就是我所拥有的:
@Execute
public void execute(@Named(IServiceConstants.ACTIVE_SHELL) Shell shell, @Named(IServiceConstants.ACTIVE_PART) MPart activePart) {
Clipboard clipboard = new Clipboard(shell.getDisplay());
TransferData[] transferDatas = clipboard.getAvailableTypes();
boolean weCanUseIt= false;
for(int i=0; i<transferDatas.length; i++) {
if(LocalSelectionTransfer.getTransfer().isSupportedType(transferDatas[i])) {
weCanUseIt = true;
break;
}
}
if (weCanUseIt) {
@SuppressWarnings("unchecked")
List<Object> objects = ((StructuredSelection)LocalSelectionTransfer.getTransfer().getSelection()).toList();
for(Object o: objects) {
System.out.println(o.getClass());
}
}
}
任何想法???
答案 0 :(得分:0)
如果您在RCP中编写部件以使用此传输类型进行复制操作,则只能使用LocalSelectionTransfer
在剪贴板中获取某些内容。它提供了一种直接传输选择的方法。
如果以任何其他方式将某些内容复制到剪贴板,则不会使用此转移类型(在这种情况下,它可能类似于TextTransfer
或FileTransfer
)。
因此,您只会使用LocalSelectionTransfer
来处理来自其他部分的选择,在这种情况下,您可能知道如何处理这些对象。
如果您尝试复制和剪切,则应在源查看器中执行剪切 - 但这将删除选择,因此您无法使用LocalSelectionTransfer
。使用不依赖于当前选择的FileTransfer
或TextTransfer
等转移。