Ik使用this教程定义了在运行时构建的菜单。但我想要采取的下一步是当某些事件发生时我想以编程方式重新构建此菜单,例如通过向菜单管理器说,刷新或类似的东西?知道我怎么能这样做吗?
答案 0 :(得分: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));
答案 1 :(得分:1)
不使用ExtensionContributionFactory
,而是使用org.eclipse.ui.menus
将dynamic
元素添加到所需的菜单中。您提供子类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。实现类也包含在该插件中。