我有以下代码片段,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冒泡到包含changeTextArea的面板/小部件/组合/中。简而言之,我如何阻止它进一步冒泡。任何帮助都将不胜感激(尤其是代码示例)。
发布于 2008-10-18 05:29:21
据我所知,您不能通过键盘侦听器做到这一点,但可以使用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
发布于 2008-10-20 16:59:53
您绝对可以在任何可以访问事件的代码中使用事件的cancelBubble()和preventDefault()方法。没有必要有一个事件预览...
发布于 2010-12-22 09:11:07
您可以调用发送方的cancelKey()事件。这里有一个例子,它只允许输入数字,所有其他键都会被拒绝。
私有类RowColChangeHandler实现了KeyPressHandler {
public void onKeyPress(KeyPressEvent event) {
char keyCode = event.getCharCode();
if(keyCode <48 || keyCode >57)
{
((TextArea)event.getSource()).cancelKey();
}
}
}https://stackoverflow.com/questions/214262
复制相似问题