首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >e.consume()在java中做什么?

e.consume()在java中做什么?
EN

Stack Overflow用户
提问于 2012-09-23 15:30:28
回答 3查看 35.4K关注 0票数 13

我在网上搜索,没有得到关于e.consume()的明确解释,它经常在java KeyEvent Handle.Like下面的代码中使用。

代码语言:javascript
复制
public void keyTyped( KeyEvent e ) {
    char c = e.getKeyChar();
    if ( c != KeyEvent.CHAR_UNDEFINED ) {
        s = s + c; 
        repaint();
        e.consume();
    } 
}
EN

回答 3

Stack Overflow用户

发布于 2012-09-23 15:36:32

消费函数负责在某些特定类型的事件发生期间不处理KeyListeners代码。例如:如果我想在java中做一个消费,这样它只会在按下数字时响应,那么我可以使用textfield方法来消费(而不是处理不是由于按下数字而导致的键事件)这样的事件。

票数 3
EN

Stack Overflow用户

发布于 2012-09-23 15:33:09

它是AWTEvent类的一个方法。用于消费this事件,如果可以消费的话。

你查过AWTEvent.consume()了吗

此外,可以查看How Does consume() Work?来解释消费到底是做什么的。

票数 2
EN

Stack Overflow用户

发布于 2021-06-07 16:18:40

当事件被使用时,事件的源(例如,键入键时具有焦点的JTextField )将忽略该事件。

如果您查看JComponent类的processKeyEvent方法:

代码语言:javascript
复制
protected void processKeyEvent(KeyEvent e) {
    boolean result;
    boolean shouldProcessKey;

    // This gives the key event listeners a crack at the event
    super.processKeyEvent(e);

    // give the component itself a crack at the event
    if (! e.isConsumed()) {
        processComponentKeyEvent(e);
    }

您可以看到,首先调用的是super.processKeyEvent(e),这会将事件分派给向component.addKeyListener()注册的侦听器。监听器按照它们最初注册的顺序被通知,即使其中一个人消费了事件,也都会被通知。唯一可以阻止其余侦听器处理事件的是未捕获的异常。

在侦听器收到通知后,组件本身将处理该事件,但前提是其中一个侦听器尚未使用该事件。对于JTextField,如果侦听器使用键类型的事件,字段将不会更新(但是使用键按下事件将不起作用)。

请注意,鼠标事件的行为有所不同,其中一个侦听器使用的事件仍由组件处理。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12550548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档