KeyListener无法正常工作

时间:2013-04-16 04:02:44

标签: java awt keylistener

以下代码无效。我正在尝试使用按键方法向左,向右,向上和向下移动玩家但是当我按下按键时它没有响应。我没有粘贴整个代码只是移动框的部分还有其他if语句来实现其他内容的移动。


public class innerClassKeyPressed {


   void  keyPressed( KeyEvent e)
   {
    int key= e.getKeyCode();
    if(key==KeyEvent.VK_LEFT){
        dx=-1;
    }
     if(key==KeyEvent.VK_RIGHT){

         dx=1;
    }
    if (key==KeyEvent.VK_UP){
        dy=-1;
    }
     if (key==KeyEvent.VK_DOWN){
        dy=1;
     }
      if (key == 82)
     {
          initLevel(currlevel);

     } //R
     if (key == 78)
     {
         currlevel++;
          initLevel(currlevel);
      } 

      if ( (key == KeyEvent.VK_LEFT ) && ( key  == KeyEvent.VK_RIGHT ) && 
      (key == KeyEvent.VK_UP ) && ( key == KeyEvent.VK_DOWN )) { 

         return;
       }


        for (int row=0; row < myArray.length; row++)

        {
            for (int column=0; column < myArray[row].length; column++)
            {
                 if( myArray[row][column]==  Contents.PLAYER)                       { 
                        if (myArray[row+dy][column+dx] == Contents.BOX)
                        {

                            if (myArray[row+dy*2][column+dx*2] == Contents.EMPTY)

                             {

                                myArray[row+dy][column+dx]= Contents.PLAYER; 
                                 myArray[row][column]= Contents.EMPTY;

                                myArray[row+dy*2][column+dx*2]= Contents.BOX;

2 个答案:

答案 0 :(得分:1)

KeyListeners因不工作而臭名昭着(事实上他们确实这样做,而不是你认为的那样)。

KeyListener的问题在于,只有当他们注册的组件可以聚焦并具有焦点(也称为键盘焦点)时,他们才会做出反应。

相反,您应该使用Key Bindings,因为它们可以确定触发它们的焦点状态。

答案 1 :(得分:0)

当我猜你使用JFrame和Canvas绘制你的播放器时,我也会认为这不起作用,因为你还没有将KeyListener添加到JFrame。

例如:

JFrame frame = new JFrame();
frame.addKeyListener(keylistener);