我在网上搜索并没有得到关于e.consume()的使用的明确解释,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();
}
}
答案 0 :(得分:6)
答案 1 :(得分:2)
这是AWTEvent
类的方法。它用于消耗this
事件(如果可以使用它)。
您是否检查了AWTEvent.consume()
?
此外,请查看How Does consume() Work?有关确切消费的解释。
答案 2 :(得分:2)
查看documentation:KeyEvent
继承InputEvent类的consume
方法。使用消费方法会消耗此事件,因此将不会以默认方式处理来源。
答案 3 :(得分:2)
Consume函数负责在某些特定类型的事件发生期间不处理KeyListeners
代码。例如:如果我想在java中创建一个textfield
,它只会在按下数字时响应,那么我可以使用consume方法来消耗(不处理由于按下而导致的键事件数字)此类事件。
答案 4 :(得分:0)
当事件被消费时,事件源(例如在键入键时具有焦点的 JTextField)将忽略该事件。
如果您查看 processKeyEvent
类的 JComponent
方法:
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,如果侦听器使用了键类型事件,则该字段不会更新(但使用键按下事件将无效)。
请注意,鼠标事件的行为有所不同,其中一个侦听器消耗的事件仍由组件处理。