Остановить запуск события в GWT
Вопрос
У меня есть следующий фрагмент кода, changeTextArea - это объект TextArea.
changeTextArea.addKeyboardListener(new KeyboardListenerAdapter()
public void onKeyPress( Widget sender, char keyCode, int modifier){
//do something
//I WISH TO STOP THE EVENT THAT MAPS TO THIS KEYPRESS FROM BUBBLING ANY FURTHER
}
}
Как бы я остановил событие, которое вызывает вызов этого метода из-за того, что он всплывает из changeTextArea в Panels / Widgets / Composites / Независимо от того, что содержит changeTextArea.Короче говоря, как мне остановить дальнейшее бурление?Буду признателен за любую помощь (особенно за примеры кода).
Решение
Насколько я знаю, вы не можете сделать это через прослушиватель клавиатуры, но это возможно, добавив предварительный просмотр события с помощью класса DOM:
DOM.addEventPreview(EventPreview preview)
Затем, когда вы получите событие:
onEventPreview(Event event)
Вы должны вернуть false, чтобы сказать, что хотите отменить событие. Объект Event также поддерживает этот метод:
public final void cancelBubble(boolean cancel)
Отменяет всплытие для данного события. Это остановит распространение события на родительские элементы. Р>
Вы можете найти более подробную информацию здесь: http: // google-web-toolkit .googlecode.com / СВН / Javadoc / 1.5 / index.html? Обзор-summary.html р>
Другие советы
Вы, безусловно, можете использовать методы cancelBubble () и protectDefault () события из любого кода, который имеет доступ к событию. Предварительный просмотр события не требуется ...
Вы можете вызвать событие cancelKey () отправителя. Вот пример, который будет позволять вводить только цифры, все остальные ключи будут отклонены. Р>
закрытый класс RowColChangeHandler реализует KeyPressHandler {Р>
public void onKeyPress(KeyPressEvent event) {
char keyCode = event.getCharCode();
if(keyCode <48 || keyCode >57)
{
((TextArea)event.getSource()).cancelKey();
}
}
}
вы могли бы достичь этого, когда это возможно, выполнив
event.doit = false