0

我想在 JFace 中显示一个弹出菜单TreeViewer

该菜单应包含 3 个永远不会更改的常量菜单项,以及根据单击(选择)的树节点而变化的附加项。

一种选择是使用setRemoveAllWhenShown(true),但这每次都会删除所有菜单项,包括常量项。

我想避免这种情况。

所以结束我的任务:

  • 如果使用右键单击树而不选择任何节点,则仅显示常量项。
  • 如果使用右键单击特定节点,则显示常量项(如果存在则删除先前的附加项)并为此节点添加附加项(如果此选项可用,也可以替换它)。

到目前为止我的代码:

//Add Some Actions
menuManager.add(..);
menuManager.add(..);
menuManager.add(..);
menuManager.add(new Separator());

//This will delete all items inluding the constant, I want to avoid that        
//menuManager.setRemoveAllWhenShown(true);

menuManager.addMenuListener(new IMenuListener() {           
  public void menuAboutToShow(IMenuManager manager) {
    IStructuredSelection selection = (IStructuredSelection) mTreeViewer.getSelection();
    if (!selection.isEmpty()) {
          BaseItm selected = (BaseItm) selection.getFirstElement();

          if (selected instanceof sometype) {                                                             
             //Remove additional item IF exists
             manager.add(sepcificActionForThisNode);
          }         
    }
 }                      
});
4

2 回答 2

0

用于IAction.setId(String id)为自定义操作设置唯一 ID,以便以后可以使用 删除这些操作IMenuManager.remove(String id)

于 2011-11-01T13:24:01.460 回答
0

添加所有操作并使用javax.swing.JComponent#setVisible(boolean)

于 2011-10-19T14:01:58.850 回答