イベントが消費されると、イベントのソース (キーが入力されたときにフォーカスがあった 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()
ます。リスナーは最初に登録された順序で通知され、そのうちの 1 つがイベントを消費した場合でも、すべてのリスナーに通知されます。残りのリスナーによるイベントの処理を停止できる唯一のものは、キャッチされない例外です。
リスナーに通知された後、コンポーネント自体がイベントを処理しますが、それはリスナーのいずれかによって消費されていない場合のみです。JTextField の場合、リスナーがキー型イベントを消費した場合、フィールドは更新されません (ただし、キーが押されたイベントを消費しても効果はありません)。
マウス イベントの動作は異なることに注意してください。いずれかのリスナーによって消費されるイベントは、コンポーネントによって引き続き処理されます。