| スレッドを使い,背景色と文字色を変化さす。 (オフスクリーンの利用) |
import java.applet.Applet;
import java.awt.*;
public class ja52a extends Applet implements Runnable
{
Font f;
Image of; //オフスクリーンイメージ
Graphics ofg; //オフスクリーンイメージのGraphicsオブジェクト
int Rb = 0; //Applet背景色のRGB値
int Gb = 0;
int Bb = 0;
int b_delta = 5; //Applet背景色のRGB値の増分
int Rs = 255; //文字列色のRGB値
int Gs = 100;
int Bs = 0;
int Gs_delta = 8; //文字列色のG値の増分
int Bs_delta = 10; //文字列色のB値の増分
Thread td = null; //スレッド
int i = 0;
public void init(){
of = createImage(size().width,size().height); //オフスクリーンイメージ領域を作成
ofg = of.getGraphics(); //作成したオフスクリーンイメージのGraphicsオブジェクトを取得
f = new Font("TimesRoman",Font.BOLD,24); //フォントの設定
}
public void paint(Graphics g){
ofg.setColor(new Color(Rb,Gb,Bb)); //オフスクリーンImageの色を設定
ofg.fillRect(0,0,size().width,size().height); //オフスクリーンImageを塗り潰す
Rb += b_delta; //オフスクリーンImageの色のRGB値を変化さす
Gb += b_delta;
Bb += b_delta;
if(Rb > 255){ //RGB値が255を越えた場合
Rb = 255;
Gb = 255;
Bb = 255;
b_delta = b_delta * (-1); //RGB値の増分の+,-符号を反転する
}
if(Rb < 0){ //RGB値が0より小さくなった場合
Rb = 0;
Gb = 0;
Bb = 0;
b_delta = b_delta * (-1); //RGB値の増分の+,-符号を反転する
}
ofg.setFont(f);
ofg.setColor(new Color(Rs,Gs,Bs)); //オフスクリーンImageの色を設定
if(i < 20)String st = "Java"; //カウンタ変数iにより,文字列を切り替える
else st = "Applet";
ofg.drawString(st,5,20); //オフスクリーンに文字列を描画
Gs += Gs_delta; //色のG値を変化さす
if(Gs > 255){
Gs = 255;
Gs_delta = Gs_delta * (-1);
}
if(Gs < 0){
Gs = 0;
Gs_delta = Gs_delta * (-1);
}
Bs += Bs_delta; //色のB値を変化さす
if(Bs > 255){
Bs = 255;
Bs_delta = Bs_delta * (-1);
}
if(Bs < 0){
Bs = 0;
Bs_delta = Bs_delta * (-1);
}
g.drawImage(of,0,0,this); //オフスクリーンImageを画面に描画する
}
public void Update(Graphics g){ //Update()のオーバーライド
paint(g);
}
public void start(){
if(td == null){
td = new Thread(this);
td.start();
}
}
public void run(){
while(true){
try{
repaint();
i += 1; //文字列を"JAVA"と"Applet"で切り替えるのに利用するカウンタ変数
if(i > 40)i = 0;
Thread.sleep(200); //0.2秒間隔で実行
}catch(InterruptedException e){
stop();
}
}
}
public void stop(){
if(td != null){
td.stop();
td = null;
}
}
}
末尾