我在网上搜索了一下,并没有得到关于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();
}
}
5条答案
按热度按时间cpjpxq1n1#
从JavaDocs
使用此事件,使其不会被产生它的源以默认方式处理。
本质上,它的意思是,如果您不希望将事件分派给任何其他事件侦听器或由任何其他事件侦听器处理。
尽管,一般来说,这取决于各个侦听器的实现
7vux5j2d2#
查看文档:
KeyEvent
继承了InputEvent类的consume
方法。consume方法使用此事件,因此它不会被发起它的源以默认方式处理。agyaoht73#
Consume函数负责在某些特定类型的事件发生期间不处理
KeyListeners
代码。例如:如果我想在java中创建一个textfield
,使它只在按下数字时响应,那么我可以使用consume方法来消费(不处理不是由于按下数字而引起的keyevents)这样的事件。rryofs0p4#
它是
AWTEvent
类的一个方法。如果this
事件可以被消费,则使用它来消费它。你查过
AWTEvent.consume()
吗另外,看看consume()是如何工作的?来解释消费到底是做什么的
0wi1tuuw5#
当事件被使用时,事件源(例如,在键入键时具有焦点的JTextField)将忽略该事件。
如果你看一下
JComponent
类的processKeyEvent
方法:您可以看到
super.processKeyEvent(e)
首先被调用,这将事件分派给用component.addKeyListener()
注册的侦听器。侦听器将按照它们最初注册的顺序得到通知,并且即使其中一个侦听器使用了该事件,它们也会得到通知。唯一可以阻止事件被其余侦听器处理的是未捕获的异常。监听器收到通知后,组件本身将处理该事件,但仅在其中一个监听器尚未使用该事件的情况下。对于JTextField,如果侦听器使用了键键入事件,则字段不会更新(但使用键按下事件将不起作用)。
请注意,鼠标事件的行为不同,其中一个侦听器使用的事件仍然由组件处理。