gpt4 book ai didi

java - 在 TreeViewer 中隐藏菜单项

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

我正在尝试从上下文(弹出菜单)隐藏/取消隐藏子菜单项(菜单管理器)当在树中选择/未选择特定节点时。

虽然 setVisible 方法按预期触发,但没有效果。

代码:

TreeViewer tViewer;

tViewer = new TreeViewer(parent, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL);

tViewer.setLabelProvider(new WorkbenchLabelProvider());
tViewer.setContentProvider(new BaseWorkbenchContentProvider());
tViewer.setInput(viewFactory.getInstance().getRoot());


final MenuManager menuMain = new MenuManager("Main",null);
menuMain.add(mActionClose);


MenuManager menuManager = new MenuManager("#PopupMenu", "contextMenu");
menuManager.add(menuMain);


menuManager.addMenuListener(new IMenuListener() {
public void menuAboutToShow(IMenuManager manager) {

//Get the selected node in tree
IStructuredSelection selection = (IStructuredSelection) tViewer.getSelection();

if (!selection.isEmpty()) { //If something selected
NNodeBase ob = (NNodeBase) selection.getFirstElement(); //Get the base class of node

if (!(ob instanceof NTMModel)) {
menuMain.setVisible(false);
}
else
menuMain.setVisible(true);
}
}
});


Menu menu = menuManager.createContextMenu(tViewer.getControl());
tViewer.getControl().setMenu(menu);

最佳答案

您必须将管理器设置为在显示菜单之前重新创建菜单:

menuManager.setRemoveAllWhenShown(true);

然后,在 menuAboutToShow() 中添加项目,测试您需要的条件:

if ((ob instanceof NTMModel)) {
menuManager.add(mActionClose);
} else {
// don't show the menu item
}

您不再需要menuMain

关于java - 在 TreeViewer 中隐藏菜单项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8056989/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com