5

我有以下代码片段,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 的 Panels/Widgets/Composites/Whatever 中。简而言之,我如何阻止它进一步冒泡。任何帮助将不胜感激(尤其是代码示例)。

4

4 回答 4

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

于 2008-10-18T05:29:20.827 回答
4

您绝对可以在任何可以访问事件的代码中使用事件的 cancelBubble() 和 preventDefault() 方法。无需进行活动预览...

于 2008-10-20T16:59:52.927 回答
2

您可以调用发送方的 cancelKey() 事件。这是一个仅允许输入数字的示例,所有其他键都被拒绝。

私有类 RowColChangeHandler 实现 KeyPressHandler {

    public void onKeyPress(KeyPressEvent event) {
        char keyCode = event.getCharCode();
        if(keyCode <48 || keyCode >57)
        {
            ((TextArea)event.getSource()).cancelKey();
        }
    }
}
于 2010-12-22T01:11:07.103 回答
0

你可以通过做 event.doit = false

于 2014-07-28T13:53:18.143 回答