| 1文字ずつ色を変え,さらに赤色表示の文字を1文字づつ移動していく。 |
import java.applet.*;
import java.awt.*;
public class ja06 extends Applet implements Runnable
{
Thread th = null; //スレッドの定義
String s = "Welcome!KodayanHomepage"; //マーキーに表示する文字列
int slength; //文字列の文字数
char sa[]; //文字列を配列に格納する(1文字づつ表示するため)
int redc = 0; //赤色表示する文字を識別する
Color c[] = {Color.pink,Color.white,Color.orange,Color.yellow,Color.green,Color.blue,
Color.magenta}; //7色を配列に格納
public void init()
{
slength = s.length(); //文字列の文字数を取得
sa = new char[slength]; //文字配列の生成
s.getChars(0,slength,sa,0); //文字列sを配列に格納する。
}
public void paint(Graphics g)
{
Font f=new Font("TimesRoman",Font.BOLD,24); //フォントの設定
g.setFont(f);
FontMetrics fm = g.getFontMetrics(); //フォント情報を得るためのFontMetoricオブジェクト
int sw = fm.stringWidth(s); //文字列の横幅をピクセル値で取得
int sh = fm.getHeight(); //フォントの高さを取得
int x = 10; //文字を描画する開始位置のx座標
int ci = 0; //カラー配列のIndex番号
g.setColor(Color.black);
g.fillRect(x-2,20,sw+20,sh+2); //黒で塗り潰した四角形の描画
for(int i = 0;i < slength;i++,ci++)
{
if(i ==redc){
g.setColor(Color.red);
}
else{
if(ci == 7) ci = 0; //カラー配列の最後に達したら,先頭に戻す
g.setColor(c[ci]); //カラー配列の順番に従い色を設定
}
g.drawChars(sa,i,1,x,20 + sh); //配列内の指定文字を描画する
x += fm.charWidth(sa[i]); //描画位置のx座標を,文字幅分移動する
}
}
public void start() //スレッドの実行
{
if (th == null){
th = new Thread(this); //Threadオブジェクトの作成。
th.start(); //Threadクラスのstart()メソッドが呼び出され,スレッドを開始する。
//そしてアプレット内に定義されたrun()メソッドが呼び出される。
}
}
public void run()
{
while (true)
{
repaint(); //paint()メソッドを呼び出し,内容を常時更新。
if(++redc == slength){ //赤色が文字列の最後に達したら
redc = 0; //リセットする(先頭の文字を赤色に)
}
else{
redc++; //redcを1増加
}
try{
Thread.sleep(500); //スレッド間隔を0.5秒に
}
catch (InterruptedException e){
stop();
}
}
}
}
末尾