首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何为quickMenu添加类似于JDT中“重构”上下文菜单的键绑定?

如何为quickMenu添加类似于JDT中“重构”上下文菜单的键绑定?
EN

Stack Overflow用户
提问于 2011-10-06 17:37:57
回答 2查看 2.5K关注 0票数 69

我想在我的eclipse插件中添加一个快捷方式,以显示现有绑定的快捷菜单。它应该像JDT中的“重构”快捷菜单一样工作。

JDT中快捷菜单的快捷方式:

JDT快捷菜单:

我已经添加了一个绑定和一个命令,但似乎缺少一些东西。Delete Something条目也适用于上下文菜单,只是缺少快捷菜单的快捷方式。有人知道该怎么做吗?

代码语言:javascript
复制
<extension point="org.eclipse.ui.bindings">
  <key
        commandId="myplugin.refactoring.actions.DeleteSomething"
        schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
        sequence="M1+5">
  </key>
  <key
        commandId="myplugin.refactoring.quickMenu"
        schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
        sequence="M1+9">
  </key>

代码语言:javascript
复制
<extension point="org.eclipse.ui.commands">
  <command
        categoryId="myplugin.category.refactor"
        description="Delete Something"
        id="myplugin.refactoring.actions.DeleteSomething"
        name="Extract Method">
  </command>
  <command
        categoryId="myplugin.category.refactor"
        id="myplugin.refactoring.quickMenu"
        name="Show Refactor Quick Menu">
  </command>
  <category
        id="myplugin.category.refactor"
        name="Refactor">
  </category>

EN

回答 2

Stack Overflow用户

发布于 2014-12-17 16:21:17

你也可以这样做:

为快捷菜单添加命令并设置默认处理程序。

代码语言:javascript
复制
      <command
        defaultHandler="myplugin.refactoring.QuickmenuHandler"
        id="myplugin.refactoring.quickMenu"
        name="Show Refactor Quick Menu">
      </command>

处理程序应该能够创建菜单。如下所示:

代码语言:javascript
复制
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
    ...
    Menu menu = new Menu(some parent);
    new MenuItem(menu, SWT.PUSH).setText("...");
    menu.setVisible(true);
    return null;
}

向该命令添加快捷方式(如您所做的):

代码语言:javascript
复制
 <key
    commandId="myplugin.refactoring.quickMenu"
    schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
    sequence="M1+9">
 </key>

最后,在菜单扩展点中将所有这些绑定在一起:

代码语言:javascript
复制
   <extension
     point="org.eclipse.ui.menus">
  <menuContribution
        allPopups="false"
        locationURI="popup:ch.arenae.dnp.frame.popup?after=additions">
     <menu
           commandId="myplugin.refactoring.quickMenu"
           label="Refactor">
        <command
              commandId="<first refactoring command>"
              style="push">
        </command>
     </menu>
     ...
  </menuContribution>

重要的一点是菜单元素中的commandId属性。用于在菜单中显示键盘快捷键。

票数 1
EN

Stack Overflow用户

发布于 2014-12-02 21:25:40

您可以看看JDT是如何实现同样的功能的。例如,在查看Eclipse 3.8.2源代码时,您将看到有趣的方法:

代码语言:javascript
复制
org.eclipse.jdt.ui.actions.RefactorActionGroup.installQuickAccessAction()

它在打开Java编辑器时调用。这是were programmatic handler association与当前编辑器发生的事情。

总结一下它是如何在JDT中完成的:

  1. 首先,他们在plugin.xml中有一个命令声明:

  • 他们声明了一个键绑定:

  • 一旦编辑器被创建,他们就会将这个命令与一个处理程序相关联。处理程序本身(org.eclipse.jdt.internal.ui.actions.JDTQuickMenuCreator)负责用菜单项填充快捷菜单。

您不必以编程方式将命令与处理程序相关联-另一种选择是使用org.eclipse.ui.handlers扩展点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7672536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档