我有以下代码片段,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的内容。简洁地说,如何阻止它进一步冒泡。任何帮助将不胜感激(特别是代码示例)。
答案 0 :(得分:6)
据我所知,你无法通过键盘监听器来实现,但可以通过使用DOM类添加事件预览来实现:
DOM.addEventPreview(EventPreview preview)
然后当你收到活动时:
onEventPreview(Event event)
您应该返回false,表示您要取消该活动。 Event对象也支持此方法:
public final void cancelBubble(boolean cancel)
取消给定事件的冒泡。这将阻止事件传播到父元素。
您可以在此处找到更多详细信息: http://google-web-toolkit.googlecode.com/svn/javadoc/1.5/index.html?overview-summary.html
答案 1 :(得分:4)
你绝对可以在任何有权访问Event的代码中使用Event的cancelBubble()和preventDefault()方法。没有必要进行事件预览...
答案 2 :(得分:2)
您可以调用发件人的cancelKey()事件。这是一个只允许输入数字,所有其他键被拒绝的例子。
私有类RowColChangeHandler实现了KeyPressHandler {
public void onKeyPress(KeyPressEvent event) {
char keyCode = event.getCharCode();
if(keyCode <48 || keyCode >57)
{
((TextArea)event.getSource()).cancelKey();
}
}
}
答案 3 :(得分:0)
你可以通过这样做来达到它
event.doit = false