2013-06-22 84 views
0

我一直在嘗試使用箭頭鍵移動JPanel。它一直沒有工作。我相信這是我的內心階層延伸KeyAdapter。我也不確定ActionListener是如何實施的。我所做的其他課並不重要,因爲它只是框架。使用KeyListener使用箭頭鍵移動JPanel中的矩形

package jerryWorlds; 

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 

public class Jerry extends JPanel implements ActionListener{ 

int SizeX, SizeY, PosX, PosY, VelX, VelY; 
Image img; 
Timer time = new Timer(1, this); 

public Jerry(){ 
    ImageIcon i = new ImageIcon(); 
    addKeyListener(new AL()); 
    time.start(); 
    img = i.getImage(); 
    PosX = 375; 
    PosY = 250; 
} 

public void paint(Graphics g){ 
    Graphics2D g2d = (Graphics2D)g; 
    g2d.fillRect(PosX, PosY, 50, 100); 
} 
public void actionPerformed(ActionEvent e) { 
    PosX = PosX + VelX; 
    repaint(); 
} 

private class AL extends KeyAdapter{ 
    public void keyPressed(KeyEvent e) { 
     int key = e.getKeyCode(); 
     System.out.println("YAY!"); 
     if(key == KeyEvent.VK_LEFT) 
      VelX = -1; 
     else if(key == KeyEvent.VK_RIGHT) 
      VelX = 1; 
    } 

    public void keyReleased(KeyEvent e) { 
     int key = e.getKeyCode(); 
     if(key == KeyEvent.VK_LEFT) 
      VelX = 0; 
     else if(key == KeyEvent.VK_RIGHT) 
      VelX = 0; 
    } 
} 

} 
+2

這篇由@camickr發表的文章,關於[Motion Using the Keyboard](http://tips4java.wordpress.com/2013/06/09/motion-using-the-keyboard/),肯定會爲您的知識增加一些內容:-)。好像你的問題沒有寫在寫作的意義上,看着你看到的代碼,當你按下箭頭鍵時你想畫一個新的矩形,你真的不會移動你的標題中所述的'JPanel' ... –

回答

5
  • 你要搜索這個網站的類似的問題,因爲他們通常有同樣的問題,同樣的答案。
  • 他們會告訴你焦點是一個問題,因爲組件的KeyListener除非有焦點才能工作。
  • 他們會告訴你,不管你什麼都不應該使用KeyListener,而是使用Key Bindings。
  • 他們會告訴您不要覆蓋paint(...)而是paintComponent(...),除非您確定要覆蓋組件邊框和子項的繪製(您沒有)。
  • 他們會告訴你一定要打paintComponent(...)內的超級方法。

也請看看這個animation and key bindings example