Java 如何通过actionSet扩展点将菜单贡献给Workbenchwindow?

Java 如何通过actionSet扩展点将菜单贡献给Workbenchwindow?,java,eclipse,rcp,Java,Eclipse,Rcp,在我的RCP程序中,我在工作台窗口中添加了一个菜单“Demo”,在“Demo”下面添加了一个单独的“addition”。代码如下: public class ApplicationActionBarAdvisor extends ActionBarAdvisor { private ExampleAction exampleAction; @Override protected void makeActions(IWorkbenchWindow window) { // TODO A

在我的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);
}
 ..............
}

现在,我想为“演示/添加”位置提供一个子菜单。我声明一个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扩展点中指定的视图关闭后,菜单仍然存在。 我希望菜单在与之关联的视图关闭时消失。
我的程序出了什么问题?

我认为来自的注释可能适合这里:

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

因此,问题可能出在子菜单path=“demo/additions”中,它应该包括子菜单的完整路径。如果您已经有了该子菜单,您可以尝试在该菜单内的某个操作上使用Alt+Shift+F2来查找该菜单的Id,然后从该菜单开始工作


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

我想这封信可能适合这里:

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

因此,问题可能出在子菜单path=“demo/additions”中,它应该包括子菜单的完整路径。如果您已经有了该子菜单,您可以尝试在该菜单内的某个操作上使用Alt+Shift+F2来查找该菜单的Id,然后从该菜单开始工作


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

请参阅org.eclipse.ui.internal.navigator.resources.actions.NewActionProvider.java


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

请参阅org.eclipse.ui.internal.navigator.resources.actions.NewActionProvider.java


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

谢谢您的反馈。它回答了我的第一个问题。我的第二个问题呢?我认为扩展点org.eclipse.ui.actionSetPartAssociations将一个actionSet与一个视图链接起来。关闭视图后,我认为相应的菜单应该消失,我的期望是否正确?谢谢您的反馈。它回答了我的第一个问题。我的第二个问题呢?我认为扩展点org.eclipse.ui.actionSetPartAssociations将一个actionSet与一个视图链接起来。关闭视图后,我认为相应的菜单应该消失,我的预期正确吗?