【问题标题】:Does Eclipse RCP include a built in cut/copy/paste handler?Eclipse RCP 是否包含内置的剪切/复制/粘贴处理程序?
【发布时间】:2018-10-02 17:30:27
【问题描述】:

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

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

如果没有任何内置的剪切/复制/粘贴处理程序,是否有任何有据可查的示例说明如何执行此操作?我了解如何使用 clipboard.getContentsclipboard.setContents 方法,但发现当试图找出调用复制命令时选择了哪些文本以及哪个组件具有焦点以及它是否为只读时,这开始变得不平凡当调用粘贴命令时。

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

【问题讨论】:

    标签: java eclipse eclipse-rcp e4


    【解决方案1】:

    对于 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 Widget 中查找方法名称 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()
    

    【讨论】:

    • 这可能是由于我缺乏 Eclipse RCP 知识,应该是一个单独的问题,但我不确定如何将这些处理程序链接到我的命令。如果我没有在application.e4xmi 中配置处理程序,那么当我运行 RCP 应用程序时菜单项只是灰显,所以我猜我需要做一些事情才能使用默认处理程序。
    • 抱歉,您没有明确说明这是一个 e4 应用程序(请为此使用标签 e4)。在纯 e4 应用程序中没有默认的复制/剪切/粘贴支持,并且此处显示的默认处理程序不可用。一切由你来写。
    • 你知道任何有据可查的编写剪切/复制/粘贴处理程序的示例吗?即使是一些指针也将不胜感激。
    猜你喜欢
    • 1970-01-01
    • 2011-08-30
    • 1970-01-01
    • 2010-12-10
    • 2013-05-13
    • 2020-03-30
    • 2020-08-18
    • 2011-02-25
    • 1970-01-01
    相关资源
    最近更新 更多