我正在实现一个扩展javax.swing.JFrame的类X. 我使用以下代码在X中添加了内部类KeyInputHandler:
private class KeyInputHandler extends KeyAdapter {
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_LEFT) {
}
if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
...
}
if (e.getKeyCode() == KeyEvent.VK_UP) {
...
}
if (e.getKeyCode() == KeyEvent.VK_SPACE) {
...
}
if (e.getKeyCode() == KeyEvent.VK_B) {
...
}
}
}
但由于某种原因,它无法识别我的输入。我是否必须在X类中添加其他内容?
答案 0 :(得分:3)
KeyListeners可能很棘手,而且最重要的是,只有当它们被添加到的组件具有焦点时才有效。否则你就会沉没。此外,您尚未在已发布的代码中显示已将KeyListener添加到任何组件的位置。是的,你有它的类,但实际上你使用该类来创建一个对象并添加到任何东西?
但是,尽管如此,对于您的应用程序类型和问题,您可能最好使用key bindings(查看链接),这是一个更高级别的概念,在焦点问题上更灵活
修改强>
评论中提出的问题是
什么是焦点?
根据Focus Subsytem tutorial,当GUI组件正在接收键盘输入时,它具有焦点。通常以某种方式突出显示。