GWT, отключить автоматическое закрытие MenuBar при нажатии на MenuItem?

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

Благодарю.

2 ответа

Решение

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

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

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

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

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

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

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

2) Создайте новый класс MyMenuBar, который расширяет MenuBar. Переопределите метод 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 закрытие строки меню отсутствует.

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

Вы можете установить hideOnClick ложь в пунктах меню

Смотрите здесь.

Другие вопросы по тегам