2013-05-22 54 views
0

我有一个TreePanel,它分层显示不同类型的对象。地区,城市,地点...如何防止在GXT中显示空的上下文菜单

我希望能够在不同级别显示不同的上下文菜单项。例如:对的miR区,MIC为市,MIL的位置... 我用这个剪断,以实现动态结构:

contextMenu.addListener(Events.BeforeShow, new Listener<MenuEvent>() { 
     @Override 
     public void handleEvent(MenuEvent be) { 
      //First make all menu items invisible 
      List<Component> menuItems = contextMenu.getItems(); 
      for (Component c : menuItems) { 
       c.setVisible(false); 
      }    

      //And make apprepriate menu items visible 
      TopologyTreeElement s = tree.getSelectionModel().getSelectedItem(); 
      if (s instanceof TopologyTreeElement.Region) { 
       miR.setVisible(true); 
      } 
      if (s instanceof TopologyTreeElement.City) { 
       miC.setVisible(true); 
      }         
     } 
    }); 

但是,在任何级别的,如果所有的项目都是无形的,它显示了一个空盒子。我希望它不要完全显示菜单。我试着将这段代码片段添加到方法中,但它没有提供任何帮助。

  //Do not show menu if no menu item is invisible  
      boolean isMenuShouldBeVisible = miC.isVisible() || miR.isVisible(); 
      if (!isMenuShouldBeVisible) { 
       be.preventDefault(); 
       be.stopEvent(); 
      } 

任何人都可以提出不同的方法?

回答

2

由于您正在收听BeforeShow活动,因此您可以取消活动并停止实际发生的Show活动。检查所有项目是否看不见,如果是,请拨打be.setCancelled(true)

任何以Before开头的事件都可以用来取消后面的事件 - 这就是为什么这些事件存在的原因。

相关问题