我會這樣做的方式是在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
的複合對象,它基本上只是一對聽衆。
如果有兩個偵聽器的結構非常簡單:
AWTEventMulticaster
{
first_listener_you_added;
second_listener_you_added;
}
如果你有三個監聽器,結構使用嵌套Multicaster
S:
AWTEventMulticaster
{
first_listener_you_added;
AWTEventMulticaster
{
second_listener_you_added;
third_listener_you_added;
}
}
等等...
通過從這一點仔細追蹤您的應用程序,您應該能夠找到事件消耗的位置。
非常感謝您的詳細和直接的答案! – Metaphox
@Mepaphox你很受歡迎 – Michael