阻止事件在GWT中冒泡

时间:2008-10-18 00:27:13

标签: java events 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的内容。简洁地说,如何阻止它进一步冒泡。任何帮助将不胜感激(特别是代码示例)。

4 个答案:

答案 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