首页 >Java >java教程 >为什么我的 JFrame 的 KeyListener 不响应按键?

为什么我的 JFrame 的 KeyListener 不响应按键?

Susan Sarandon
Susan Sarandon原创
2024-11-13 03:17:021089浏览

Why is my JFrame's KeyListener not responding to key presses?

JFrame 的 KeyListener 无响应:一个已解决的谜团

在尝试为 JFrame 实现 KeyListener 时,开发人员遇到了一个令人费解的问题:KeyListener 似乎没有响应,按下按键时控制台中不会出现任何消​​息。开发者怀疑JFrame缺乏焦点,寻求帮助。

经过仔细检查,发现KeyListener确实添加正确,并且焦点设置得当。然而,缺少一个关键元素:将按键事件传播到 KeyListener 的机制。

解决方案在于使用 KeyEventDispatcher。该调度程序可以定义为 JFrame 中的内部类并添加到 KeyboardFocusManager。调度程序的dispatchKeyEvent 方法处理所有按键事件,包括keyPressed、keyReleased 和keyTyped。通过实现这种机制,KeyListener 可以有效地捕获并响应按键事件。

下面是一个修改后的代码示例,其中包含了 KeyEventDispatcher:

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);
    }
}

通过此修改,KeyListener 现在将成功接收并处理关键事件,在控制台中提供预期的输出。

以上是为什么我的 JFrame 的 KeyListener 不响应按键?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn