KeyListener不起作用

usa*_*800 0 java swing keylistener

这段代码有什么问题?

addKeyListener(new KeyHandler());

private class KeyHandler extends KeyAdapter {

        public void keyPressed(KeyEvent e) {
            super.keyPressed(e);
            int key = e.getKeyCode();

            System.out.println("test");
            if(key==KeyEvent.VK_SPACE || key==KeyEvent.VK_ENTER || key==KeyEvent.VK_P) {
                paused = true;
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

这应该在控制台中打印测试,但它没有.我究竟做错了什么?

dis*_*aur 6

您正在收听的组件可能无法集中精力.如果你要沿着KeyListener路线走下去,看看你是否得到了一个焦点事件,并检查你的元素是否为isFocusable.

在任何情况下,如果你只想绑定几个键,最好使用KeyBindings:

http://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html

  • @ usama8800:鼠标事件与告诉我们哪个组件有焦点有什么关系?答:他们没有证明关注焦点.你永远不会告诉我们你要添加KeyListener的内容,而且我们知道它可能是JFrame或JPanel.在程序运行之前不要做任何假设.1+到skishore的体面回答.我建议使用Key Bindings. (4认同)
  • @ usama8800:你已经接受了正确答案,但我担心你做错了.同样,解决方案是使用密钥绑定.要了解为什么这很重要,请参阅[我昨天对同一主题的回答](http://stackoverflow.com/a/18156051/522444).运行我发布的两个程序,看看按下按钮后它们的行为,你将更好地理解所涉及的问题. (2认同)