色の変化(背景と文字列)


スレッドを使い,背景色と文字色を変化さす。
(オフスクリーンの利用)
Java Applet

ソースコード

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;
    }
  }
}

末尾