Я тестирую KeyListener для проекта Tetris, над которым я работаю. Моя главная проблема заключается в том, что я не могу заставить 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
}