我正在测试我正在研究的Tetris项目的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
}
答案 0 :(得分:0)
是否所有与面板和框架相关的代码?如果是的话,看起来好像缺少了一些东西。
已经有一个与按下按钮时移动对象有关的答案,这就是链接
how to move an object in a JPanel using the arrow keys
也许可以帮助您
答案 1 :(得分:0)
在paint()方法中,每次调用时都会使用默认位置创建一个新的Rectangle。它将取代您在keyPressed处理程序中所做的任何更改。