2011-01-21 157 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); 
相關問題