Кнопка GXT показывает меню при первом нажатии, не скрывает меню при втором нажатии - PullRequest
0 голосов
/ 21 января 2011

Это предполагаемая функциональность или я что-то не так делаю?

Все, что я делаю, - это создание кнопки GXT и вызов setMenu для присоединения меню GXT. При первом щелчке меню отображается правильно, при втором щелчке меню исчезает при MouseDown, но вновь появляется при MouseUp. Единственный способ скрыть меню - это кликнуть в сторону от кнопки.

Я подтвердил, что нет ничего странного с определенной кнопкой в ​​моем коде, добавив еще одну кнопку:

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

Если это предназначено, есть ли предложение о том, как добавить слушателя, чтобы закрыть меню при втором щелчке?

1 Ответ

0 голосов
/ 28 января 2011

Я предполагаю, что он работает так, как задумано, поскольку меню всегда скрывается, как только теряет фокус. То, что я сделал ниже, это переопределение метода onAutoHide в меню, чтобы не скрывать, если нажата кнопка с указанным идентификатором (измените соответственно). Это дает мне возможность проверить, отображается ли меню в методе 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);
...