2013-05-22 52 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開頭的事件都可以用來取消後面的事件 - 這就是爲什麼這些事件存在的原因。

相關問題