你必须将keyListener添加到所需的每个组件中。仅具有焦点的组件将发送这些事件。例如,如果JFrame中只有一个Text@R_173_2419@,则该Text@R_173_2419@具有焦点。因此,你还必须将KeyListener添加到此组件。
过程是一样的:
myComponent.addKeyListener(new KeyListener ...);
注意:某些组件无法像JLabel那样聚焦。
要将它们设置为焦点,你需要:
myComponent.setFocusable(true);
如果你不想在每个组件上注册一个侦听器,则 可以将自己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);
}
}