我有一个包含菜单项(操作)的菜单管理器“ menuManager”和一个子菜单,另一个包含更多操作的菜单管理器“ subMenu”。
final MenuManager subMenu = new MenuManager("Main",null);
subMenu.add(mActionClose);
MenuManager menuManager = new MenuManager("#PopupMenu", "contextMenu");
menuManager.add(action1);
menuManager.add(action2);
menuManager.add(subMenu);
我只能在操作上设置setEnabled(false),而不能在menumanager上设置。
最佳答案
覆盖isEnabled()
的MenuManager
方法没有任何作用。您可以做的是访问相关的MenuItem
并尝试将其禁用。
首先,将IMenuListener
添加到“上下文菜单”管理器以访问关联的Menu
:
public void menuAboutToShow(IMenuManager manager) {
manager.getMenu().addListener(SWT.Show, showContextMenuListener);
}
在侦听器中,找到与子菜单管理器匹配的
MenuItem
:public void handleEvent(Event event) {
for (MenuItem item: ((Menu)event.widget).getItems())
//MenuItem data should be our MenuManager
if (item.getData().equals(subMenu)) {
//Disable the sub-menu item
item.setEnabled(false);
//Add listener to sub-menu (see comments below the code block)
item.getMenu().addListener(SWT.Show, showSubMenuListener);
}
}
问题是
MenuManager
类中有一个错误修复代码,一旦单击该子菜单项(如果其中包含任何项),它将重新启用子菜单项。要覆盖此内容,还需要在子菜单中添加SWT.Show
侦听器,以在单击后显示菜单时更新子菜单项的启用:public void handleEvent(Event event) {
((Menu)event.widget).getParentItem().setEnabled(false);
}