我在网上搜索,没有得到关于e.consume()的明确解释,它经常在java KeyEvent Handle.Like下面的代码中使用。
public void keyTyped( KeyEvent e ) {
char c = e.getKeyChar();
if ( c != KeyEvent.CHAR_UNDEFINED ) {
s = s + c;
repaint();
e.consume();
}
}
发布于 2012-09-23 15:36:32
消费函数负责在某些特定类型的事件发生期间不处理KeyListeners
代码。例如:如果我想在java中做一个消费,这样它只会在按下数字时响应,那么我可以使用textfield
方法来消费(而不是处理不是由于按下数字而导致的键事件)这样的事件。
发布于 2012-09-23 15:33:09
它是AWTEvent
类的一个方法。用于消费this
事件,如果可以消费的话。
你查过AWTEvent.consume()
了吗
此外,可以查看How Does consume() Work?来解释消费到底是做什么的。
发布于 2021-06-07 16:18:40
当事件被使用时,事件的源(例如,键入键时具有焦点的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,如果侦听器使用键类型的事件,字段将不会更新(但是使用键按下事件将不起作用)。
请注意,鼠标事件的行为有所不同,其中一个侦听器使用的事件仍由组件处理。
https://stackoverflow.com/questions/12550548
复制相似问题