import java.applet.*;
import java.awt.*;
public class ja30a extends Applet
{
ja30aMyC myc1,myc2; //Canvasを2つ作る
Image pic[] = new Image[6]; //アニメーション用画像の配列
public void init(){
setBackground(Color.white); //Appletの背景色を白色に設定
for(int i = 0;i < 6;i++){ //6枚のgifファイルを読み込む
pic[i] = getImage(getCodeBase(),"Sy" + i + ".gif");
}
myc1 = new ja30aMyC(pic,Color.black); //ja30aMyCのコンストラクタを呼び出し,Canvasを生成
myc2 = new ja30aMyC(pic,Color.yellow);
add(myc1); //CanvasをAppletに配置
add(myc2);
}
public void stop(){ //Appletが非表示になると,同時にスレッドも停止する
myc1.stop();
myc2.stop();
}
public void start(){ //Appletが再表示されると,スレッドも再開する
myc1.start();
myc2.start();
}
public void paint(Graphics g){
g.setFont(new Font("TimesRoman",Font.ITALIC,18));
g.drawString("2つのCanvas内をクリックすれば,",10,125);
g.drawString("アニメーションの停止/再開を切り替えできる。",10,145);
}
}
class ja30aMyC extends Canvas implements Runnable //Canvasのサブクラスを定義
{
Image pic[];
Thread ani = null; //スレッドオブジェクト
int n = 0; //配列画像の番号
boolean flag = true; //スレッドの動作状態を識別するフラグ
public ja30aMyC(Image picA[],Color c){ //コンストラクタの定義
resize(100,100); //Canvasのサイズを設定
setBackground(c); //Canvasの背景色を設定
pic = picA;
}
public void start(){
if(ani == null){
ani = new Thread(this);
ani.start(); //run()メソッドを呼び出す
}
}
public void run(){
while(true){ //無限ループを繰り返す
if(n > 5) n = 0; //配列画像の番号が6になると,0にリセット
repaint(); //paint()メソッドを呼び出す
try{
Thread.sleep(1000); //1秒だけスレッドを停止する。
}catch (InterruptedException e){
}
n++; //配列画像の番号を1増やす
}
}
public void paint(Graphics g){
g.drawImage(pic[n],30,20,this); //画像の描画
}
public void stop(){
if(ani != null){
ani.stop();
ani = null;
}
}
public boolean mouseDown(Event evt,int x,int y){
if(flag)
ani.suspend(); //スレッドを一時停止
else
ani.resume(); //スレッドを再開する
flag = !flag; //flagのboolean値(true/false)を反転する
return true;
}
}
末尾