我正在尝试为我的 JFrame
实现一个 KeyListener
。在构造函数上,我正在使用以下代码:
System.out.println("test");
addKeyListener(new KeyListener() {
public void keyPressed(KeyEvent e) { System.out.println( "tester"); }
public void keyReleased(KeyEvent e) { System.out.println("2test2"); }
public void keyTyped(KeyEvent e) { System.out.println("3test3"); }
});
当我运行它时,test
消息出现在我的控制台中。但是,当我按下一个键时,我没有收到任何其他消息,就好像 KeyListener
甚至不存在一样。
我在想这可能是因为焦点不在 JFrame
所以他们 KeyListener
没有收到任何事件。但是,我很确定它是。
我有什么遗漏的吗?
最佳答案
如果你不想在每个组件上都注册一个监听器,
您可以将自己的 KeyEventDispatcher
添加到 KeyboardFocusManager
:
public class MyFrame extends JFrame {
private class MyDispatcher implements KeyEventDispatcher {
@Override
public boolean dispatchKeyEvent(KeyEvent e) {
if (e.getID() == KeyEvent.KEY_PRESSED) {
System.out.println("tester");
} else if (e.getID() == KeyEvent.KEY_RELEASED) {
System.out.println("2test2");
} else if (e.getID() == KeyEvent.KEY_TYPED) {
System.out.println("3test3");
}
return false;
}
}
public MyFrame() {
add(new JTextField());
System.out.println("test");
KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager();
manager.addKeyEventDispatcher(new MyDispatcher());
}
public static void main(String[] args) {
MyFrame f = new MyFrame();
f.pack();
f.setVisible(true);
}
}
关于java - JFrame 的无响应 KeyListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/286727/