Eclipse RCP是否包含内置剪切/复制/粘贴处理程序?

时间:2018-04-22 16:10:46

标签: java eclipse eclipse-rcp e4

正如标题所说,我想知道Eclipse RCP 4是否提供了可以链接到org.eclipse.ui.edit.cutorg.eclipse.ui.edit.copyorg.eclipse.ui.edit.paste的内置剪切/复制/粘贴处理程序命令?

我很欣赏某些SWT小部件或带有剪切/复制/粘贴操作的更复杂用例可能需要自定义处理程序,但我无法帮助但感觉我正在尝试重新发明从一个组件复制一些文本并粘贴到另一个组件的轮子。

如果没有任何内置的剪切/复制/粘贴处理程序,是否有任何记录良好的示例如何执行此操作?我理解如何使用clipboard.getContentsclipboard.setContents方法,但是在尝试查找调用复制命令时选择了哪些文本以及哪个组件具有焦点时,发现这开始变得非常简单是否只在调用paste命令时才读取。

我已经查看了这个StackOverflow问题,但它没有解释是否有内置处理程序或提供编写我自己的处理程序的任何指导。

1 个答案:

答案 0 :(得分:2)

对于3.x兼容模式Eclipse 4应用程序,这些命令定义为:

 <command
        name="%command.cut.name"
        description="%command.cut.description"
        categoryId="org.eclipse.ui.category.edit"
        id="org.eclipse.ui.edit.cut"
        defaultHandler="org.eclipse.ui.internal.handlers.WidgetMethodHandler:cut" />
  <command
        name="%command.copy.name"
        description="%command.copy.description"
        categoryId="org.eclipse.ui.category.edit"
        id="org.eclipse.ui.edit.copy"
        defaultHandler="org.eclipse.ui.internal.handlers.WidgetMethodHandler:copy" />
  <command
        name="%command.paste.name"
        description="%command.paste.description"
        categoryId="org.eclipse.ui.category.edit"
        id="org.eclipse.ui.edit.paste"
        defaultHandler="org.eclipse.ui.internal.handlers.WidgetMethodHandler:paste" />

所以他们都使用org.eclipse.ui.internal.handlers.WidgetMethodHandler作为默认处理程序,在没有其他处理程序处于活动状态时使用。

此处理程序使用反射在当前关注的SWT窗口小部件中查找方法名称cutcopypaste,并在找到该方法时调用该方法。

对于纯e4应用程序,没有剪切/复制/粘贴命令的默认定义,WidgetMethodHandler不可用。 SWT控件将继续支持剪切/复制/粘贴,但没有其他支持。

您可以使用以下内容将文字放入剪贴板:

Clipboard clipboard = new Clipboard(Display.getCurrent());

clipboard.setContents(new Object [] {"Text for clipboard"},
                      new Transfer [] {TextTransfer.getInstance()});

clipboard.dispose()

并从剪贴板获取文字:

Clipboard clipboard = new Clipboard(Display.getCurrent());

String text = (String)clipboard.getContents(TextTransfer.getInstance());

clipboard.dispose()