何千もの計算を必要とする JPanel で画像を描画しようとしています。描画の進行をアニメーション化したいと考えています。つまり、描画の 100K 回の繰り返しをすべて一度に実行してから JPanel を再描画する代わりに、各繰り返しの後に再描画し、数分の 1 秒間一時停止して、ユーザーが画像が徐々に表示されるのを見るようにします。ただし、JPanel を更新するたびに以前の描画が消去されるため、私の方法は機能しません。N回目の反復ですべての(1..N-1)計算を複製せずにこれを行うにはどうすればよいですか?
この例を考えてみましょう: 「雪」が徐々に画面に表示されるようにします。ただし、repaint() が呼び出されるたびに以前のものはすべて消去されるため、このコードは 100,000 番目の「スノーフレーク」のみを表示します。
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();
}
}