您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

JavaJFrame的KeyListener无响应

JavaJFrame的KeyListener无响应

你必须将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);
    }
}
java 2022/1/1 18:21:55 有598人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶