【问题标题】:Replacing menu item in Jface popupmenu替换 Jface popupmenu 中的菜单项
【发布时间】:2011-12-10 23:12:20
【问题描述】:

我想在 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);
          }         
    }
 }                      
});

【问题讨论】:

    标签: java eclipse eclipse-plugin jface treeviewer


    【解决方案1】:

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

    【讨论】:

    • Action 没有 setVisible 方法,你的意思是我应该使用 ActionContributionItem 吗?无论如何,我必须隐藏所有以前的项目并每次都显示需要的项目,对吗?
    • 另一个问题,如果我有 20 个特定的菜单项,每次我点击树中的一个项目时,我都必须:1)隐藏以前可见的项目(我必须将它存储在某个地方) 2)循环通过manage.getItems()并找到我需要显示的动作
    • jep ActionContributionItem 很好。但是 setRemoveAllWhenShown(true) 对我也很有效。很便宜。你有什么顾虑?
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-11
      • 1970-01-01
      相关资源
      最近更新 更多