Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在TreeViewer中隐藏菜单项_Java_Eclipse Plugin_Jface - Fatal编程技术网

Java 在TreeViewer中隐藏菜单项

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

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

尽管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
}

你不再需要菜单名了。

1)你说我不需要菜单名是什么意思?这个管理器作为子菜单,里面有几个菜单项!2) 在我真正的菜单结构中,我在菜单主键旁边有另一项,RemoveAllWhenShown每次都需要我重建所有内容是的,菜单每次显示时都会重建。如果
menuMain
是一个子菜单,那么它是可以的。但是为什么我不能设置可见性呢?我想你应该调用
menuManager.update(true)(请看这个答案:)我没有测试它。我也试过了。。。是否可以“禁用”菜单管理器,使此子菜单显示为灰色?我只能在操作上设置setEnabled(false),而不能在菜单管理器上设置setEnabled(false)