我需要一个Eclipse插件项目,以创建一个TreeViewer中的上下文菜单。但是,菜单不应该包含常量项目,它们应该根据所选节点的类型而有所不同。例如,我的TreeViewer中有以下层次:上下文菜单 - SWT
Node A
|
--Node B
|
--Node C
对于节点A - 我想显示有动作的菜单,但节点B和C,我不希望任何显示(无菜单)。 我设法创建节点A的菜单,但后来选择了一些其他类型的节点时,我无法摆脱它。我的代码如下所示:
treeViewer.addSelectionChangedListener(
new ISelectionChangedListener(){
public void selectionChanged(SelectionChangedEvent event) {
if(event.getSelection() instanceof IStructuredSelection) {
IStructuredSelection selection = (IStructuredSelection)event.getSelection();
Object o = selection.getFirstElement();
MenuManager menuMgr = new MenuManager();
if (o instanceof NodeA){
Menu menu = menuMgr.createContextMenu(treeViewer.getControl());
treeViewer.getControl().setMenu(menu);
getSite().registerContextMenu(menuMgr, treeViewer);
menuMgr.add(new SomeAction());
}else {
//what ?
}
}
}
}
);
在else分支我试着打电话给dispose()
,removeAll()
在MenuManager ...没有什么工作!
任何帮助表示赞赏,谢谢。
谢谢你的提示,现在我创建菜单一次,然后在选择的情况下,我打电话action.setEnabled(假)。这工作正常,但我没有找到一个Action的setVisible方法。我想在选择其他节点而不是灰色时隐藏它。谢谢 – AndaP 2011-06-02 17:28:08
如果您添加包含您的操作的ActionContributionItems,它们有一个'setVisible(boolean)'方法。但是你应该选择'setRemoveAllWhenShown(*)'或更新'ActionContributionItems'的可见性,因为它们是不同的方法。 – 2011-06-03 01:56:10