1

在我的 RCP 程序中,我在工作台窗口中添加了一个菜单“Demo”,并在“Demo”下方添加了一个分隔符“addition”。代码如下,

public class ApplicationActionBarAdvisor extends ActionBarAdvisor {

private ExampleAction exampleAction;

@Override
protected void makeActions(IWorkbenchWindow window) {
    // TODO Auto-generated method stub
    super.makeActions(window);

    exampleAction = new ExampleAction(window);      
}

@Override
protected void fillMenuBar(IMenuManager menuBar) {
    // TODO Auto-generated method stub
    super.fillMenuBar(menuBar);

    MenuManager demoMenu = new MenuManager("&Demo", "demo");
    demoMenu.add(exampleAction);
    demoMenu.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));      
    menuBar.add(demoMenu);
}
 ..............

}

现在我想为“demo/additions”这个位置贡献一个子菜单。我声明了一个 actionSet 扩展点,如下所示,

<extension
         point="org.eclipse.ui.actionSets">
      <actionSet
            id="RCP-View-Example.actionSet"
            label="actionSet">
         <menu
               id="RCP-View-Example.menu"
               label="ActionSetMenu"
               path="demo/additions">
            <groupMarker
                  name="menuItem">
            </groupMarker>
         </menu>
         <action
               class="Action1"
               id="RCP-View-Example.action"
               label="Action"
               menubarPath="RCP-View-Example.menu/menuItem"
               style="push"
               toolbarPath="main/additions">
         </action>
      </actionSet>
   </extension>
   <extension
         point="org.eclipse.ui.actionSetPartAssociations">
      <actionSetPartAssociation
            targetID="RCP-View-Example.actionSet">
         <part
               id="my.view">
         </part>
      </actionSetPartAssociation>
   </extension>

我没有看到菜单被贡献并显示在“演示”菜单下。我将菜单路径从“path="demo/additions”修改为“path="org.eclipse.ui.main.menu/demo/additions”,还是看不到。

谁能帮忙看看我的程序出了什么问题?

我将菜单路径从path="demo/additions修改为path="additions"。打开视图时看到“Demo”后面的菜单。但是,在actionSetPartAssociations扩展点中指定的视图关闭后,菜单仍然存在那里。我希望菜单在与其关联的视图关闭时消失。我的程序有什么问题?

4

2 回答 2

1

我认为文档中的这个注释可能适合这里:

存在当前影响操作集的实现限制。定义要在操作集中引用的整个菜单结构非常重要。因此,例如,如果另一个动作集定义了一个名为“示例”的菜单,则不可能依赖现有的“示例”。有必要在希望使用它的每个操作集中重新定义“示例”菜单。

所以问题可能出在你的子菜单 path="demo/additions" 中,它应该包括子菜单的完整路径。如果您已经拥有该子菜单,则可以在该菜单内的某个操作上尝试 Alt+Shift +F2 以找到该菜单的 ID 并从那里开始工作。

但是,如果您刚开始使用菜单,我建议您立即使用命令框架。即使您使用的是已经建立的富客户端,您也可以轻松地将命令放入您喜欢的任何位置,并且在 Eclipse Juno 和更新版本中不推荐使用 actionSets ExtensionPoint。一个很好的命令教程可以在这里找到。

于 2012-09-19T12:16:14.810 回答
0

参考 org.eclipse.ui.internal.navigator.resources.actions.NewActionProvider.java

请参阅 fillContextMenu() 方法。他们在那里创建了一个子菜单。它将帮助您理解。

于 2012-09-19T12:27:47.580 回答