我正在为我正在研究的俄罗斯方块项目测试KeyListener。我的主要问题是,按下一个键后,我无法让JPanel重新绘制以更新矩形的位置。 JPanel嵌入到JFrame中,因此我不确定是更新面板还是框架。这是代码:
public class mainBoardTest extends JPanel implements KeyListener {
private Rectangle rect;
public mainBoardTest() {
setPreferredSize(new Dimension(400, 800));
setBackground(Color.BLACK);
}
public void init() {
this.addKeyListener(this);
}
public void paint(Graphics g) {
//super.paintComponent(g);
rect = new Rectangle(0,0,50,50);
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.RED);
g2.fill(rect);
}
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
rect.setLocation(rect.x + 2, rect.y);
}
else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
rect.setLocation(rect.x - 2, rect.y);
}
else if (e.getKeyCode() == KeyEvent.VK_UP) {
rect.setLocation(rect.x, rect.y - 2);
}
else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
rect.setLocation(rect.x, rect.y + 2);
}
repaint(); //does not repaint
}
它的所有代码都与面板和框架有关?如果是,它看起来像缺少一些东西。
已经有一个与按键移动对象相关的答案,即链接
how to move an object in a JPanel using the arrow keys
也许这可以帮到你
在paint()方法中,每次调用时都会创建一个新的Rectangle,并带有一个默认位置。这取代了您在keyPressed处理程序中所做的更改。