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
ложь в пунктах меню
Смотрите здесь.