GWT, отключить автоматическое закрытие MenuBar при нажатии на MenuItem? - PullRequest
2 голосов
/ 08 июля 2011

Я хочу, чтобы можно было отключить автоматическое закрытие панели меню при нажатии на элемент меню? У меня есть несколько MenuItem, которые похожи на флажки, поэтому я могу проверить более одного MenuItem и не хочу, чтобы мое меню закрывалось каждый раз, когда я проверял один.

Спасибо.

Ответы [ 3 ]

0 голосов
/ 30 августа 2012

Вы можете установить hideOnClick на false в меню элементов

См. здесь .

0 голосов
/ 21 декабря 2018

Я столкнулся с той же проблемой, и я поделюсь с вами своим решением:

1) Создайте новый класс MyMenuItemWithCheckBox, который расширяет MenuItem. В конструкторе установите идентификатор элемента в (например) menuItemWIthCheckBox + Уникальный текст. this.getElement (). setId ("menuItemWithCheckBox_" + menuItemLabel);

2) Создайте новый класс MyMenuBar, расширяющий панель меню. Переопределите метод onBrowserEvent следующим образом:

Override
    public void onBrowserEvent(Event event) {
        if (DOM.eventGetType(event) == Event.ONCLICK && getSelectedItem().getElement().getId().contains("CheckBox")) {
            Scheduler.get().scheduleFinally(new Scheduler.ScheduledCommand() {
                @Override
                public void execute() {
                    getSelectedItem().getScheduledCommand().execute();
                }
            });

            event.stopPropagation();
        } else {
            super.onBrowserEvent(event);
        }
    }

Теперь запланированная команда MenuItem вызывается всегда, но в случае вашей Пункт меню checkBox закрывается без строки меню.

Надеюсь, это поможет вам. Я потратил больше дня на создание этого решения. : -)

0 голосов
/ 03 августа 2011

Во-первых, напрямую это невозможно, поскольку всплывающая панель, отображающая подменю, является закрытой в классе MenuBar.

Бууут, есть способ сделать это ...

Просто извлеките текущий код MenuBar.java из репозитория кода Google и включите его в свой gwt-проект eclipse.

Вам не нужно ничего менять, например, Декларация пакета или что-то. Просто поместите ваш исходный код в ваш проект, и он просто заменит исходный класс MenuBar из gwt-sdk во время компиляции (работает также с размещенным режимом разработки).

Тогда вы можете просто установить для свойства autoHide всплывающей панели значение false, и после нажатия всплывающее окно не должно исчезать.

...