重写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);
}
你测试过了吗? –
我该怎么做? – kenny
@TonnyMadsen你说得对,isEnabled()在那里是没用的方法... –