首先,我们在面板中创建了按钮监听事件以及键盘监听事件,当点击了按钮后,键盘事件失效,例如在贪吃蛇游戏中,点击了其余的控制按钮,则无法再用键盘去控制贪吃蛇的移动了,差了很多资料,才发现这是一个焦点转移问题,,,,点击按钮后,焦点转移到了按钮上,,,,
为此,我们需要重新获取焦点:panel.requestfocus();方法可以重新获取,但仅有这个不够,我们还必须确定它的位置(这就是我为什么会查很多资料的原因,知道有它,但不知道如何用它);
public class SnakePanel1 extends JPanel implements KeyListener{//这是你创建的面板类
this.setFocusable(true);//获取焦点
this.addKeyListener(new KeyAdapter() {
});//这是你创建的键盘监听器,此处采用匿名内部类的方法实现键盘监听
以上是面板,然而requestfocus()方法却不是放在你的键盘监听器的方法内,而是放在你建立的按钮监听那个方法里面,如果同一个面板内有按钮,并且你的按钮监听方法是一内部类的形式在写,我建议可以写一个方法
public void GetFocus() {
this.requestFocus();
}//重获焦点
//这是用于按钮监听的内部类,你需要把方法放在这里面,,
class beginAction implements ActionListener{
public void actionPerformed(ActionEvent e) {
GetFocus();
// TODO Auto-generated method stub
if(false==run) {
Setrun();
}
else {
Setnotrun();
}
}
}