gpt4 book ai didi

java - 禁用 Jface 菜单管理器(灰显)

转载 作者:行者123 更新时间:2023-11-30 04:57:31 25 4
gpt4 key购买 nike

我有一个菜单管理器“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),而不能在菜单管理器上设置。

最佳答案

重写 MenuManagerisEnabled() 方法没有任何影响。您可以做的是访问相关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);
}

关于java - 禁用 Jface 菜单管理器(灰显),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8062578/

25 4 0