JFrame的KeyListener无响应

82

我试图为我的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没有接收到任何事件。但我相当确定它已经在那里了。 我是否漏掉了什么?
12个回答

-2

哈哈...你需要做的就是确保

addKeyListener(this);

在你的代码中被正确地放置。


8
你应该真正解释一下“正确位置”是指哪里,这样才能使回答更有帮助。 - Till

-3

你可以让自定义的JComponents设置它们的父JFrame可获得焦点。

只需添加一个构造函数并传入JFrame,然后在paintComponent中调用setFocusable()方法。

这样,无论其他组件是否被按下,JFrame都将始终接收到KeyEvents事件。


4
绝对不行 - 这完全是个<敏感词已屏蔽>,在多个方面都不合适:a) 不当的子类化 b) 不当的引用传递 c) 在绘图时不适当地改变状态 d) ... - kleopatra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接