Java 如何在eclipse rcp应用程序中删除不需要的菜单贡献?

Java 如何在eclipse rcp应用程序中删除不需要的菜单贡献?,java,eclipse,eclipse-plugin,eclipse-rcp,Java,Eclipse,Eclipse Plugin,Eclipse Rcp,我制作了一个EclipseRCP应用程序,一切正常,但我最近注意到菜单中的折射器选项。我想把它处理掉。我在ActionBarAdvisor.java中有以下内容: @Override protected void fillMenuBar(IMenuManager menu) { menu.add(createFile()); menu.add(createEdit()); menu.add(createNavigate());

我制作了一个EclipseRCP应用程序,一切正常,但我最近注意到菜单中的折射器选项。我想把它处理掉。我在ActionBarAdvisor.java中有以下内容:

@Override
    protected void fillMenuBar(IMenuManager menu) {

        menu.add(createFile());
        menu.add(createEdit());
        menu.add(createNavigate());
        menu.add(createProject());
        menu.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
        menu.add(createWindow());
        menu.add(createHelp());

    }
上述功能将操作添加到菜单中,如下所示:

edit.add(undoAct);
同时,undoAct的定义如下:

private IWorkbenchAction undoAction
makeActions函数的内容如下:

@Override
    protected void makeActions(IWorkbenchWindow window) {
        undoAction = ActionFactory.UNDO.create(window);
        undoAction.setText("Undo Menu");
        register(undoAction);
}
我发现了一个建议,建议使用hideActionSets隐藏菜单。但我无法隐藏整个菜单,只能隐藏它的动作!

现在如何删除折射器选项?
谢谢。

您可以使用活动,如上所述。 首先,您需要:

  • 使用插件间谍
  • 第一种方法是使用插件间谍。按alt-shift-F2并单击 要隐藏的菜单项或工具栏按钮。如果有身份证 “活动操作定义标识符”标题下的字符串,则 运气好。此项已使用命令扩展名添加,您可以 使用此ID作为活动扩展的模式参数。但不是 使用命令扩展名添加的所有项都显示其ID 连接到插件spy的字符串

    作为旁注,ID字符串是以句点分隔的。例如 按钮可能是“org.eclipse.ui.navigate.backwardHistory”。有规律的 表达式使用句点表示任何字符。幸运的是,这段时间 用作通配符与实际句点字符匹配,因此不需要 如果你不想逃离他们。我发现这使它更容易阅读 如果他们没有逃脱,而且极不可能造成任何损失 模棱两可的匹配

  • 使用插件注册表和plugin.xml文件
  • 第二种方法是使用插件注册表。您可以通过以下方式打开此视图: 前往:

    窗口/显示视图…/其他/插件开发/插件注册表

    您想做的是尝试获取几条信息:

    a) 贡献UI元素的插件 b) 有关插件用于创建的扩展类型的信息 UI元素

    如果有一个非常独特的单词与UI元素或其工具关联 提示:然后您可以在插件注册表的筛选器字段中使用此选项来尝试 确定哪个插件贡献了UI元素。过滤器字段为 这不是一个非常强大的工具,所以使用起来可能有点令人沮丧。事实并非如此 允许使用通配符,但不匹配空格字符

    当您跟踪哪个插件贡献了UI元素时,您就可以 从找到的plug-Ins视图中打开有问题的插件 与插件开发透视图中的包资源管理器一起分组。 然后转到Extensions选项卡并搜索ID字符串,该字符串通常可以 可以在命令或操作集扩展的用法中找到。如果用户界面 元素使用ActionSet添加,然后将插件ID作为UI ID的前缀 在给定给Activities扩展的模式参数中。例如 org.eclipse.ui.actionsets.foo成为模式 org.eclipse.ui/org.eclipse.ui.actionsets.foo

    然后创建一个永远不会被激活的新的
    活动
    ,以及一个对应的
    活动模式绑定
    ,该绑定具有上一步中找到的
    id
    。在您的
    plugin.xml
    中,它将如下所示:

    <extension point="org.eclipse.ui.activities">  
       <activity id="myActivity" name="MenuHidingActivity">  
          <enabledWhen>  
             <with variable="activePartId">    
                <equals value="nonExistentPartId"></equals>      
             </with>
          </enabledWhen>
       </activity>
       <activityPatternBinding activityId="myActivity" pattern="menuItemID">  
       </activityPatternBinding>
    </extension>  
    
    
    
    menuiteId是我要隐藏的菜单的ID吗?什么是活动PartId和不存在PartId。我还发现重构是由org.eclipse.ltk.ui.refactoring添加的,在commands extensions下,对应类别的id是:org.eclipse.ltk.ui.category.refactoring,那么内容是什么呢?“menuItemID是我想要隐藏的菜单的id?”是的。这不必与命令类别的ID相同,请在“org.eclipse.ui.menus”扩展下查看。activePartId是变量的名称,它保持原样。NoneExistentPartId是某个不存在的部件ID。您还可以使用任何其他始终为false的表达式(例如“某物计数为-1”)替换下的标记