java - JFrame 的无响应 KeyListener

标签 java swing jframe keylistener

我正在尝试为我的 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/

相关文章:

java - 结果集的问题

java - 如何询问 JButton 是否是 JButton 数组的一部分?

java - 通过操作事件更改 JPanel 组件的属性

Java:JFrame 分辨率?

Java根据关键字排序

java - Gson - 无法从静态上下文引用非静态变量

Java数组问题。无法传递值

java - JSTL:绝对 uri:http://java.sun.com/jsp/jSTL/core 无法在 web.xml 或随此应用程序部署的 jar 文件中解析

java - 更新 JFrame 内容

java.awt.Frame.setBackground(Color arg0) 不显示粉红色