私がこれを行う方法は、中にブレークポイントを入れますjava\awt\Component.java
。 JDKでそれを見つけることができるはずです。あなたが複数のリスナーを持っている場合
protected void processKeyEvent(KeyEvent e) {
KeyListener listener = keyListener;
if (listener != null) {
int id = e.getID();
switch(id) {
case KeyEvent.KEY_TYPED:
listener.keyTyped(e);
break;
case KeyEvent.KEY_PRESSED:
listener.keyPressed(e);
break;
case KeyEvent.KEY_RELEASED:
listener.keyReleased(e);
break;
}
}
}
この場合KeyListener
変数は少し非直感的です:これは、あなたが登録したリスナーにすべてのイベントを送出する方法です。追加された順にリスナーのリストを反復処理すると考えられます。実際には、基本的に単なるリスナーのペアであるAWTEventMulticaster
という複合オブジェクトを使用します。
あなたは構造が簡単である2人のリスナーがある場合:
AWTEventMulticaster
{
first_listener_you_added;
second_listener_you_added;
}
を次の3人のリスナーを持っている場合は、構造が入れ子になったMulticaster
の使用:
AWTEventMulticaster
{
first_listener_you_added;
AWTEventMulticaster
{
second_listener_you_added;
third_listener_you_added;
}
}
をというように...
この時点からアプリケーションを慎重に追跡することで、イベントが消費されるポイントを見つけることができるはずです。
詳細でわかりやすい答えに感謝します。 – Metaphox
@Metaphox大歓迎です – Michael