我正在用Java编写一个简单的生命游戏程序,但是在实现动画效果时遇到了一些问题。我有一个名为LifeDraw的JComponent类,它显示一个像素网格,并具有以下绘制方法:
protected void paintComponent(Graphics g) {
super.paintComponent(g);
for (int y = 0; y < lGrid.getHeight(); y++) {
for (int x = 0; x < lGrid.getWidth(); x++) {
if (lGrid.getCell(x,y) == 1) {
g.setColor(Color.red);
g.fillRect(x * lGrid.getSqSize(), y * lGrid.getSqSize(), lGrid.getSqSize(), lGrid.getSqSize());
} else {
g.setColor(Color.white);
g.fillRect(x * lGrid.getSqSize(), y * lGrid.getSqSize(), lGrid.getSqSize(), lGrid.getSqSize());
}
}
}
}
然后还有另一个类LifeGrid,其中有一个方法
run()
,调用该方法将更新一个世代的像素网格,然后调用LifeDraw.repaint()
。但是,如果我尝试在循环中调用run()
,则JComponent不会重新绘制,直到循环完成,因此显示的只是第一个和最后一个世代。我认为可能更新得太快而无法重新绘制,因此尝试在迭代之间使用Thread.sleep()
,但仍然存在相同的问题。理论上(或者至少我希望如此),它应该在每次迭代之间重新绘制组件,并显示像素逐渐变化的动画。我对Java GUI并不是很了解,所以任何帮助都将不胜感激。希望我已经表达清楚了,如果有疑问,请告诉我!