可以使用的InputMap/ActionMap中的機制:
Object escapeActionKey = new Object();
pnl.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("ESCAPE"), escapeActionKey);
pnl.getActionMap().put(escapeActionKey, new AbstractAction() {
public void actionPerformed(ActionEvent e) {
System.err.println("escape 1");
}
});
JComponent.WHEN_IN_FOCUSED_WINDOW
表示當pnl
組件位於聚焦窗口中時,此擊鍵可用。
或者你也可以添加一個全局AWTEventListener所監聽器:
Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() {
public void eventDispatched(AWTEvent event) {
if(event.getID() == KeyEvent.KEY_PRESSED) {
KeyEvent kEvent = (KeyEvent) event;
boolean isEsc = (kEvent.getKeyCode() == KeyEvent.VK_ESCAPE);
if(isEsc) {
System.err.println("escape 2");
}
}
}
}, AWTEvent.KEY_EVENT_MASK);
的可能的複製http://stackoverflow.com/questions/286727/java-keylistener-for-jframe-is-being-unresponsive – 2013-03-12 12:45:25
唐不使用KeyListener,而是使用KeyBindings。這將避免您描述的那類問題。 – 2013-03-12 13:08:43