Ex13_1



/*--------------------------------
 Ex13_1.java
 スレッド処理によるアニメーション1
 ---------------------------------*/
import java.applet.*;
import java.awt.*;
import java.util.Random;

public class Ex13_1 extends Applet implements Runnable {
	int x, y, wid, hei;		// 楕円の位置座標(x,y),幅wid,高さhei 用変数宣言
	int rr, gg, bb;			// 色設定(rr,gg,bb)用の変数宣言
	Color col;				// 色クラス宣言
	Random rnd;				// 乱数クラス宣言
	Thread thd = null;		// スレッド宣言

	public void init() {		// 初期設定
		this.setSize(300, 300);		// アプレットの画面サイズ指定
		x = 10;	y = 10;				// 初期位置(x,y)
		wid = 50; hei = 50;			// 初期幅wid,高さhei
		rr = 255; gg = 0; bb = 0;	// 初期色(rr,gg,bb)
		col = new Color(rr,gg,bb);
		rnd = new Random();
		thd = new Thread(this);	// 新しいスレッドを作る
		thd.start();				// スレッド開始
	}

	public void paint(Graphics g) {
		g.setColor(col);			// 色セット
		g.fillOval(x, y, wid, hei);	// 楕円描画
	}

	public void run() {	// スレッド開始時に呼び出されるメソッド
		while (true) {		// 無限ループ
			x = rnd.nextInt(200);	// x座標:0,1,2,...,199の乱数
			y = rnd.nextInt(200);	// y座標:0,1,2,...,199の乱数
			wid = rnd.nextInt(50)+50;	// 幅:50 + 0,1,...,49の乱数
			hei = rnd.nextInt(50)+50;	// 高さ:50 + 0,1,...,49の乱数

			rr = rnd.nextInt(256);	// 赤色光:0,1,...,255の乱数
			gg = rnd.nextInt(256);	// 緑色光:0,1,...,255の乱数
			bb = rnd.nextInt(256);	// 青色光:0,1,...,255の乱数
			col = new Color(rr,gg,bb);

			repaint();			// 再描画:paint()メソッドを呼び出し

			try {
				thd.sleep(250);	// スレッド一時停止:500ミリ秒
			} catch(InterruptedException e) {
			}
		}
	}

}