1

Ik 使用教程定义了一个在运行时构建的菜单。但是我想要采取的下一步是当某些事件发生时我想以编程方式重新构建这个菜单,例如通过对菜单管理器说,刷新或类似的东西?知道我该怎么做吗?

4

2 回答 2

2

您可以告诉菜单管理器在每次显示菜单时删除所有项目,让您有机会重建菜单:

MenuManager mm = new MenuManager();
mm.setRemoveAllWhenShown(true);

mm.addMenuListener(new IMenuListener() {
    public void menuAboutToShow(IMenuManager manager) {
        if(giraffes) {
            Action giraffeAction = new Action("Giraffe") {
                public void run() {
                    // do giraffe-y stuff
                }
            };
            mgr.add(giraffeAction);
        }
    }
});

Control myControl = myViewer.getControl();
myControl().setMenu(mm.createContextMenu(myControl));
于 2012-10-04T14:13:17.383 回答
1

不使用ExtensionContributionFactory,使用org.eclipse.ui.menusdynamic元素添加到所需的菜单。您提供子类的实现类org.eclipse.ui.actions.CompoundContributionItem,您将有机会在每次打开菜单时重建菜单的该部分。

编辑:添加指向示例的指针。

有关 plugin.xml 的区别,请参见http://git.eclipse.org/c/platform/eclipse.platform.ui.git/tree/examples/org.eclipse.ui.examples.contributions/plugin.xml#n666。实现类也包含在该插件中。

于 2012-10-11T03:02:51.313 回答