如何解决在面板中点击按钮后键盘事件失效问题

        首先,我们在面板中创建了按钮监听事件以及键盘监听事件,当点击了按钮后,键盘事件失效,例如在贪吃蛇游戏中,点击了其余的控制按钮,则无法再用键盘去控制贪吃蛇的移动了,差了很多资料,才发现这是一个焦点转移问题,,,,点击按钮后,焦点转移到了按钮上,,,,

         为此,我们需要重新获取焦点: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();
		}
	}
	
}

猜你喜欢

转载自blog.csdn.net/qq_43502987/article/details/88824920