e.consume()在Java中做什么

w3nuxt5m  于 2023-05-05  发布在  Java
关注(0)|答案(5)|浏览(253)

我在网上搜索了一下,并没有得到关于e.consume()的使用的明确解释,而e.consume()经常在java KeyEvent Handle中使用。

public void keyTyped( KeyEvent e ) {
    char c = e.getKeyChar();
    if ( c != KeyEvent.CHAR_UNDEFINED ) {
        s = s + c; 
        repaint();
        e.consume();
    } 
}
cpjpxq1n

cpjpxq1n1#

从JavaDocs
使用此事件,使其不会被产生它的源以默认方式处理。
本质上,它的意思是,如果您不希望将事件分派给任何其他事件侦听器或由任何其他事件侦听器处理。
尽管,一般来说,这取决于各个侦听器的实现

7vux5j2d

7vux5j2d2#

查看文档:KeyEvent继承了InputEvent类的consume方法。consume方法使用此事件,因此它不会被发起它的源以默认方式处理

agyaoht7

agyaoht73#

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

rryofs0p

rryofs0p4#

它是AWTEvent类的一个方法。如果this事件可以被消费,则使用它来消费它。
你查过AWTEvent.consume()
另外,看看consume()是如何工作的?来解释消费到底是做什么的

0wi1tuuw

0wi1tuuw5#

当事件被使用时,事件源(例如,在键入键时具有焦点的JTextField)将忽略该事件。
如果你看一下JComponent类的processKeyEvent方法:

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,如果侦听器使用了键键入事件,则字段不会更新(但使用键按下事件将不起作用)。
请注意,鼠标事件的行为不同,其中一个侦听器使用的事件仍然由组件处理。

相关问题