2008-10-18 84 views
5

我有以下代码片段,changeTextArea是一个TextArea对象。停止冒泡GWT中的事件

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小组/小工具/复合/无论调用此方法的事件。简而言之,我如何阻止它进一步冒泡。任何帮助将不胜感激(尤其是代码示例)。

回答

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

4

你绝对可以使用事件的cancelBubble()和的preventDefault()方法,从能够访问到该活动的代码中。没有必要事件预览...

2

您可以调用发件人的cancelKey()事件。以下是一个只允许输入数字的例子,其他所有的键都会被拒绝。

私有类RowColChangeHandler实现KeyPressHandler {

public void onKeyPress(KeyPressEvent event) { 
     char keyCode = event.getCharCode(); 
     if(keyCode <48 || keyCode >57) 
     { 
      ((TextArea)event.getSource()).cancelKey(); 
     } 
    } 
} 
0

,你可以尽可能做 event.doit = false

+0

达到它也许有些解释会让你的答案更加有用:) – 2014-07-28 13:55:55