2013-06-22 81 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