2013-04-16 118 views
0

以下代碼無效。我正在嘗試使用按鍵方法向左,向右,向上和向下移動播放器,但是當我按下按鍵時,它不響應。我沒有粘貼整個代碼,只是移動框的部分還有其他if語句來實現其他內容的移動。KeyListener不工作


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; 
+0

*「我沒有粘貼整個代碼」*這可能是問題在於代碼未顯示。爲了更快地獲得更好的幫助,請發佈[SSCCE](http://sscce.org/)。 –

+0

好的,我會發布整個關鍵監聽器。謝謝 –

+0

*「整個關鍵聽衆」。*沒有人要求「整個關鍵聽衆」。在對「SSCCE」的含義進行隨機猜測之前,請先閱讀***鏈接的文章。 –

回答

0

正如我猜你使用一個JFrame和Canvas來繪製您的播放器,然後我也要去相信這心不是工作,因爲你還沒有加入的KeyListener到JFrame。

例如:

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

這是很多猜測。猜測更適合評論。鑑於你沒有足夠的代表。爲了提出意見,我的建議是避免像這樣的問題(有效)猜測。 –

+0

感謝您的回答,我認爲這可能是問題所在。我調用了我的keylistener類innerClassKeypressed。所以我加了j.addKeyListener(innerClassKeyPressed);在我的主要方法。這可以嗎? –

+1

這不是一個好主意,因爲它不太可能會獲得直接的鍵盤焦點。 – MadProgrammer

1

KeyListeners是臭名昭著的不工作(以及實際上他們做的,只是沒有辦法的辦法,你認爲他們應該)。

KeyListener的問題在於,它們只有在它們註冊的組件有焦點且具有焦點(也稱爲鍵盤焦點)時纔會發生反應。

相反,您應該使用Key Bindings,因爲它們允許確定觸發它們的焦點狀態。