我正在尝试在需要数千次计算的 JPanel 上绘制图像,并且我想为绘图的进程设置动画。即,我不想一次完成所有 100K 次绘图迭代,然后重新绘制 JPanel,而是希望在每次迭代后重新绘制,然后暂停几分之一秒,以便用户看到图像逐渐出现。但是,每次刷新 JPanel 都会擦除以前的绘图,所以我的方法不起作用。如何在不复制第 N 次迭代的所有 (1..N-1) 计算的情况下做到这一点?
考虑这个例子:我希望“雪”逐渐出现在屏幕上。但是,此代码将仅显示第 100,000 个“雪花”,因为每次调用 repaint() 时都会删除所有先前的“雪花”。
import javax.swing.*;
import java.awt.*;
import java.util.Random;
class spanel extends JPanel{
public void paintComponent(Graphics g){
super.paintComponent(g);
g.drawLine(snow.x, snow.y, snow.x, snow.y);
}
}
class snow extends Thread {
static int x,y;
Random r = new Random();
public void run(){
JFrame sboard = new JFrame();
sboard.setSize(600,600);
sboard.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
spanel mypanel = new spanel();
sboard.add(mypanel);
sboard.setVisible(true);
for (int i=0;i<100000;i++){
x=r.nextInt(600);
y=r.nextInt(600);
sboard.repaint();
try {
snow.sleep((long)10);
} catch (InterruptedException e) {};
}
}
}
public class SnowAnim {
public static void main(String[] args) {
(new snow()).start();
}
}