2016-01-11 68 views
3

嗨,我是新來的Java和我試圖移動一個JPanel(播放器)跨JFrame使用箭頭鍵,但由於某種原因,它不工作。我相信這是因爲keyPressed方法在按下按鍵時沒有響應,但我真的不知道。keyPressed方法不工作Java

這是球員類的代碼:

import java.awt.Color; 
import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 

import javax.swing.JPanel; 

public class Player extends JPanel implements KeyListener{ 
    int x=0,y=0; 
    public Player(){ 
     this.setBounds(x, y, 9, 9); 
     this.setOpaque(true); 
     this.setBackground(Color.red); 
     this.setFocusable(true); 
     addKeyListener(this); 
    } 

    public void keyPressed(KeyEvent e) { 
     int key = e.getKeyCode(); 

     if(key == KeyEvent.VK_UP){ 
      this.setBounds(x, x-9, 9, 9); 
     }else if(key == KeyEvent.VK_DOWN){ 
      this.setBounds(x, y+9, 9, 9); 
     }else if(key == KeyEvent.VK_RIGHT){ 
      this.setBounds(x+9, y, 9, 9); 
     }else if(key == KeyEvent.VK_LEFT){ 
      this.setBounds(x-9, y, 9, 9); 
     } 

    } 
    public void keyReleased(KeyEvent arg0) {} 

    public void keyTyped(KeyEvent arg0) {} 


} 

提前感謝!編輯: 這是JFrame的代碼: import javax.swing.JFrame;

public class Cave { 


    public static void main(String[] args) { 
     JFrame frame = new JFrame("Cave Generator"); 
     frame.setBounds(0, 0, 0, 0); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 

      Player p = new Player(); 
     frame.getContentPane().add(p); 

    } 

} 
+0

看來,你可能會需要重新粉刷爲了反映這些變化,「框架」。 – SomeJavaGuy

+1

那你有沒有調試過它?該方法是否被調用,但帶有意外的密鑰代碼?你是否在調用setBounds,但沒有發生任何事情?你真的需要自己做診斷工作。 –

+0

我做過調試,並沒有調用該方法 –

回答

3

您的代碼有兩個問題。

  1. 第一個問題是,一旦您在您的框架上調用可見呼叫,而不是在框架上添加播放器組件。
  2. 您不存儲播放器的最後位置。

讓你的代碼下面的變化和它應該運行:

public class Cave { 

    public static void main(String[] args) { 
     JFrame frame = new JFrame("Cave Generator"); 
     frame.setBounds(0, 0, 0, 0); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     Player p = new Player(); 
     frame.getContentPane().add(p); 
     frame.setVisible(true); 
    } 

} 

球員在keyPressed

public void keyPressed(KeyEvent e) { 
    int key = e.getKeyCode(); 

    if(key == KeyEvent.VK_UP){ 
     y = y-9; 
    }else if(key == KeyEvent.VK_DOWN){ 
     y = y+9; 
    }else if(key == KeyEvent.VK_RIGHT){ 
     x = x+9; 
    }else if(key == KeyEvent.VK_LEFT){ 
     x = x-9; 
    } 
    this.setBounds(x, y, 9, 9); 
} 
+0

工程太棒了!非常感謝! –