Java 在TreeViewer中隐藏菜单项
我试图从上下文(弹出菜单)中隐藏/取消隐藏子菜单项(菜单管理器) 在树中选择/未选择特定节点时 尽管setVisible方法按预期触发,但它不起作用 守则:Java 在TreeViewer中隐藏菜单项,java,eclipse-plugin,jface,Java,Eclipse Plugin,Jface,我试图从上下文(弹出菜单)中隐藏/取消隐藏子菜单项(菜单管理器) 在树中选择/未选择特定节点时 尽管setVisible方法按预期触发,但它不起作用 守则: TreeViewer tViewer; tViewer = new TreeViewer(parent, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL); tViewer.setLabelProvider(new WorkbenchLabelProvider()); tViewer.setContentPr
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
}
你不再需要菜单名了。1)你说我不需要菜单名是什么意思?这个管理器作为子菜单,里面有几个菜单项!2) 在我真正的菜单结构中,我在菜单主键旁边有另一项,RemoveAllWhenShown每次都需要我重建所有内容是的,菜单每次显示时都会重建。如果
menuMain
是一个子菜单,那么它是可以的。但是为什么我不能设置可见性呢?我想你应该调用menuManager.update(true)代码>(请看这个答案:)我没有测试它。我也试过了。。。是否可以“禁用”菜单管理器,使此子菜单显示为灰色?我只能在操作上设置setEnabled(false),而不能在菜单管理器上设置setEnabled(false)