【发布时间】:2014-05-08 14:11:06
【问题描述】:
我有一个实现KeyListener 的类,一切正常,但有一个小问题是我的KeyListener 只有在我点击画布后才能工作,所以如果我开始游戏,我必须点击一次然后我可以使用我的键盘,代码:
public class Game extends Canvas implements Runnable {
....
initGame() {
...
addKeyListener(new Keyboard());
setFocusable(true);
}
private class Keyboard implements KeyListener {
...
}
}
-有没有一种方法可以让我的画布在创建后“活跃”?
【问题讨论】:
-
因为没有焦点。对于 Swing,通常在基于 AWT 的较低级别
KeyListener上使用键绑定。有关如何使用它们的详细信息,请参阅How to Use Key Bindings。此外,Swing 中的渲染通常在JPanel中完成,而不是在Canvas.. -
通过在组件上调用
setFocusable(true);设置焦点。 -
@Braj 不,该方法只是设置一个组件可聚焦。你在描述
requestFocusInWindow()。 -
@Braj 从描述性问题(和示例代码)来看,组件已经可以聚焦,因为 OP 可以单击组件并激活关键侦听器...
-
如果您按照@AndrewThompson 的建议使用键绑定,则可以绕过
KeyListener的大部分问题。本周第 100 次,here 是我在创建键绑定时给出的简短回答。
标签: java swing canvas focus keylistener