2011-01-21 158 views
0

这是预期的功能还是我做错了什么?GXT按钮在第一次点击时显示菜单,在第二次点击时不会隐藏菜单

我所做的只是创建一个GXT按钮并调用setMenu来附加一个GXT菜单。在第一次点击时,菜单正确显示,第二次点击时,菜单在MouseDown上消失,但在MouseUp上重新出现。让菜单隐藏的唯一方法是点击按钮。

我确认它是不是有什么奇怪的,在我的代码的特定按钮,通过增加另一个按钮:

Button button = new Button("test"); 
Menu menu = new Menu(); 
button.setMenu(menu); 
add(button); 

如果这样做的目的,是有关于如何添加一个监听器关闭建议第二次点击菜单?

回答

0

我猜测它是按预期工作的,因为一旦失去焦点,菜单就会一直隐藏起来。我在下面做的是覆盖菜单中的onAutoHide方法,如果按下具有指定ID的按钮(相应地更改),则不会隐藏。这使我能够检查菜单是否显示在按钮的onClick方法中 - 然后不再显示它。被警告虽然...我绝不是专家,这是一个破解:)

Button button = new Button("Test") { 
     @Override 
     protected void onClick(ComponentEvent ce) { 
      ce.preventDefault(); 
      focus(); 
      hideToolTip(); 
      if (!disabled) { 
       ButtonEvent be = new ButtonEvent(this); 
       if (!fireEvent(Events.BeforeSelect, be)) { 
        return; 
       } 
       if (menu != null) { 
        if (!menu.isVisible()) 
         showMenu(); 
        else 
         hideMenu(); 
       } 
       fireEvent(Events.Select, be); 
      } 
     } 
    }; 
    button.setId("TESTBUTTONID"); 
    Menu menu = new Menu() { 
     @Override 
     protected boolean onAutoHide(PreviewEvent pe) { 
      if (pe.getEventTypeInt() == Event.ONMOUSEDOWN 
        && !(pe.within(getElement()) || (fly(pe.getTarget()) 
          .findParent(".x-ignore", -1) != null)) 
        && !(fly(pe.getTarget()).findParent(".x-btn", -1) != null 
        && fly(pe.getTarget()).findParent(".x-btn", -1).getId() 
          .equalsIgnoreCase("TESTBUTTONID"))) { 
       MenuEvent me = new MenuEvent(this); 
       me.setEvent(pe.getEvent()); 
       if (fireEvent(Events.AutoHide, me)) { 
        hide(true); 
        return true; 
       } 
      } 
      return false; 
     } 
    }; 
    button.setMenu(menu); 
    RootPanel.get().add(button); 
相关问题