JAVA 键盘监听事件没有反应……拜求高手给解决一下
我在做一个俄罗斯方块程序,KeyListener监听器接口无法监听到键盘事件,按键后没有反应,不知哪里出了问题。速求高手给解决一下,很急啊!拜谢!这是用户界面类的部分代码...
我在做一个俄罗斯方块程序,KeyListener监听器接口无法监听到键盘事件,按键后没有反应,不知哪里出了问题。速求高手给解决一下,很急啊!拜谢!
这是用户界面类的部分代码
class user
{
……
gamecanvas1.addKeyListener(new control1());
//gamecanvas2.setBackground(Color.white);
//gamecanvas1.addKeyListener(new control1());
//菜单栏//
menu1=new JMenu("游戏");
menu2=new JMenu("设置");
menu3=new JMenu("帮助");
menu4=new JMenu("关卡选择");
mymenubar.add(menu1);mymenubar.add(menu2);mymenubar.add(menu3);
menu1_item1=new JMenuItem("新游戏");menu1_item1.addActionListener(new control1(1));
menu1_item2=new JMenuItem("网络对战");menu1_item2.addActionListener(new control1(2));
menu1_item3=new JMenuItem("退出");menu1_item3.addActionListener(new control1(3));
……
}
下面是处理类的部分代码
public void actionPerformed(ActionEvent e)
{
switch(currentbutton)
{
case 1:System.exit(0);break;
case 2:N.netuser();break;
case 3:System.exit(0);break;
case 4:System.exit(0);break;
case 5:System.exit(0);break;
case 6:System.exit(0);break;
case 7:time=800;break;
case 8:time=750;break;
case 9:time=700;break;
case 10:time=625;break;
case 11:time=550;break;
case 12:time=475;break;
case 13:time=375;break;
case 14:time=275;break;
case 15:time=175;break;
case 16:time=75;break;
case 17:if(!B.isgameplay)
{
B.isgameplay=true;
B.initgamearea();
B.th().start();
}
else
{
try{
B.th().wait();
}catch(InterruptedException E){}
B.isgameplay=false;
}
break;
case 18:System.exit(0);break;
case 19:System.exit(0);break;
case 20:System.exit(0);break;
case 21:System.exit(0);break;
default:
}
}
public void keyPressed(KeyEvent e)
{
if(B.isgameplay)
{
switch(e.getKeyCode())
{
case KeyEvent.VK_UP:B.turnblock();break;
case KeyEvent.VK_DOWN:B.blockdown();break;
case KeyEvent.VK_LEFT:B.moveleft();break;
case KeyEvent.VK_RIGHT:B.moveright();break;
}
}
else return;
}
public void keyTyped(KeyEvent e)
{
}
public void keyReleased(KeyEvent e)
{
}
我是在窗体类中创建的JPanle对象,然后在JPanel对象中添加键盘监听,监听处理指向控制类,然后再设置焦点,但是这样没用。这个问题困惑我几天了,各种办法都阐释了,一直解决不了,拜求高手给解决一下啊
class jframe extends JFrame
{
public static JPanel gamecanvas1,gamecanvas2,nextcanvas;
……
setVisible();
gamecanvas1.addKeyListener(new control());
canvas1.requestFocus();
}
class control
{
control()//为gamecanvas1.addKeyListener(new control());创建实例对象
{
}
int control(int currentbutton)//这是另一构造函数
{
……
}
public void keyPressed(KeyEvent e)
{
if(B.isgameplay)
{
switch(e.getKeyCode())
{
case KeyEvent.VK_UP:B.turnblock();break;
case KeyEvent.VK_DOWN:B.blockdown();break;
case KeyEvent.VK_LEFT:B.moveleft();break;
case KeyEvent.VK_RIGHT:B.moveright();break;
}
}
else return;
}
public void keyTyped(KeyEvent e)
{
}
public void keyReleased(KeyEvent e)
{
} 展开
这是用户界面类的部分代码
class user
{
……
gamecanvas1.addKeyListener(new control1());
//gamecanvas2.setBackground(Color.white);
//gamecanvas1.addKeyListener(new control1());
//菜单栏//
menu1=new JMenu("游戏");
menu2=new JMenu("设置");
menu3=new JMenu("帮助");
menu4=new JMenu("关卡选择");
mymenubar.add(menu1);mymenubar.add(menu2);mymenubar.add(menu3);
menu1_item1=new JMenuItem("新游戏");menu1_item1.addActionListener(new control1(1));
menu1_item2=new JMenuItem("网络对战");menu1_item2.addActionListener(new control1(2));
menu1_item3=new JMenuItem("退出");menu1_item3.addActionListener(new control1(3));
……
}
下面是处理类的部分代码
public void actionPerformed(ActionEvent e)
{
switch(currentbutton)
{
case 1:System.exit(0);break;
case 2:N.netuser();break;
case 3:System.exit(0);break;
case 4:System.exit(0);break;
case 5:System.exit(0);break;
case 6:System.exit(0);break;
case 7:time=800;break;
case 8:time=750;break;
case 9:time=700;break;
case 10:time=625;break;
case 11:time=550;break;
case 12:time=475;break;
case 13:time=375;break;
case 14:time=275;break;
case 15:time=175;break;
case 16:time=75;break;
case 17:if(!B.isgameplay)
{
B.isgameplay=true;
B.initgamearea();
B.th().start();
}
else
{
try{
B.th().wait();
}catch(InterruptedException E){}
B.isgameplay=false;
}
break;
case 18:System.exit(0);break;
case 19:System.exit(0);break;
case 20:System.exit(0);break;
case 21:System.exit(0);break;
default:
}
}
public void keyPressed(KeyEvent e)
{
if(B.isgameplay)
{
switch(e.getKeyCode())
{
case KeyEvent.VK_UP:B.turnblock();break;
case KeyEvent.VK_DOWN:B.blockdown();break;
case KeyEvent.VK_LEFT:B.moveleft();break;
case KeyEvent.VK_RIGHT:B.moveright();break;
}
}
else return;
}
public void keyTyped(KeyEvent e)
{
}
public void keyReleased(KeyEvent e)
{
}
我是在窗体类中创建的JPanle对象,然后在JPanel对象中添加键盘监听,监听处理指向控制类,然后再设置焦点,但是这样没用。这个问题困惑我几天了,各种办法都阐释了,一直解决不了,拜求高手给解决一下啊
class jframe extends JFrame
{
public static JPanel gamecanvas1,gamecanvas2,nextcanvas;
……
setVisible();
gamecanvas1.addKeyListener(new control());
canvas1.requestFocus();
}
class control
{
control()//为gamecanvas1.addKeyListener(new control());创建实例对象
{
}
int control(int currentbutton)//这是另一构造函数
{
……
}
public void keyPressed(KeyEvent e)
{
if(B.isgameplay)
{
switch(e.getKeyCode())
{
case KeyEvent.VK_UP:B.turnblock();break;
case KeyEvent.VK_DOWN:B.blockdown();break;
case KeyEvent.VK_LEFT:B.moveleft();break;
case KeyEvent.VK_RIGHT:B.moveright();break;
}
}
else return;
}
public void keyTyped(KeyEvent e)
{
}
public void keyReleased(KeyEvent e)
{
} 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询