2011-01-21 2 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); 
관련 문제