/**********************************************************************************
* *
* 輝く文字のアプレット *
* Shining Letters Applet *
* ( ShinLetter.java ) *
* Author : Seiichi Inoue *
**********************************************************************************/
/******************** << インポートパッケージクラス定義 >> ******************/
import java.applet.Applet; /*Appletパッケージ */
import java.awt.*; /*Abstract Windowing Toolkitパッケージの全て*/
import java.lang.*; /*langパッケージ */
/**************************** << 自分のクラス定義 >> ************************/
// クラス名称 : ShinLetter
// アクセス制御 : public(どのクラスからもアクセス可能)
// 継承クラス : Applet
// 引継クラス : Runnable(Threadを使用可能にする)
public class ShinLetter extends Applet implements Runnable {
/************************** << クラス変数属性の宣言 >> **********************/
Thread kicker=null; /* スレッド制御(初期値:停止) */
Dimension d; /* 表示領域 */
Image offs; /* オフスクリーンエリア */
Graphics grf; /* 描画領域 */
String msg; /* 表示文字格納 */
int no; /* 文字の数 */
int width; /* 輝く文字の表示位置 */
String cen; /* 輝く文字(1字) */
String bef; /* 輝く文字までの文字 */
int speed; /* 表示速度 */
String param; /* パラメータ引き取り */
int backred,backgreen,backblue; /* 背景色パラメータ情報 */
Color backcolor; /* 背景色 */
int mojired,mojigreen,mojiblue; /* 文字色パラメータ情報 */
Color mojicolor; /* 文字色 */
int shinred,shingreen,shinblue; /* 輝き色パラメータ情報 */
Color shincolor; /* 輝き色 */
Font font; /* 文字フォント */
String fontname; /* 文字フォントパラメータ情報 */
int fontsize; /* 文字サイズパラメータ情報 */
int strHeight; /* 文字高さ */
int y_Point; /* 表示位置(高さ) */
/******************** << クラスのメッソード指定(実行手順) >> **************/
/*********** 初期化(init)メッソード ***********/
public void init() {
d = size(); /* 表示画面サイズ情報を設定 */
offs = createImage(d.width,d.height); /* オフスクリーン用表示エリア作成 */
grf = offs.getGraphics(); /* グラヒックオブジェクト取得 */
param = getParameter("message"); /* 文字列パラメータ取込 */
msg = (param != null)? /* 入力判定 */
param: "TEXT ERORR"; /* 指定なし→TEXT ERORR */
msg = " " + msg + " "; /* 空白付加(表示効果のため) */
no = msg.length(); /* 文字の数 */
param = getParameter("speed"); /* 表示速度パラメータ取込 */
speed = (param != null)? /* 入力判定(無指定時:50mSEC) */
Integer.parseInt(param): 50;
param = getParameter("font"); /* フォント種類パラメータ取込 */
fontname = (param != null)? /* 入力判定(無指定時:Dialog) */
param: "Dialog";
param = getParameter("fontsize"); /* フォントサイズパラメータ取込 */
fontsize = (param != null)? /* 入力判定(無指定時:35ポイント)*/
Integer.parseInt(param): 35;
param = getParameter("fonttype"); /* フォントタイプパラメータ取込 */
if ( "BOLD".equals (param) ) /* BOLD ? */
font = new Font(fontname,Font.BOLD,fontsize); /* BOLD設定 */
else {
if ( "ITALIC".equals (param) ) /* ITALIC ? */
font = new Font(fontname,Font.ITALIC,fontsize); /* ITALIC設定 */
else
font = new Font(fontname,Font.PLAIN,fontsize); /* PLAIN その他 */
}
strHeight = (getFontMetrics(font)).getLeading(); /* 文字の縦位置計算 */
strHeight -= (getFontMetrics(font)).getDescent();
strHeight += (getFontMetrics(font)).getAscent();
y_Point = (d.height + strHeight /* 文字の縦位置セット */
- (getFontMetrics(font)).getDescent())/2;
param = getParameter("backred"); /* 背景赤色パラメータ取込 */
backred = (param != null)? /* 入力判定(無指定時:MAX) */
Integer.parseInt(param): 255;
param = getParameter("backgreen"); /* 背景緑色パラメータ取込 */
backgreen = (param != null)? /* 入力判定(無指定時:MAX) */
Integer.parseInt(param): 255;
param = getParameter("backblue"); /* 背景青色パラメータ取込 */
backblue = (param != null)? /* 入力判定(無指定時:MAX) */
Integer.parseInt(param): 255;
backcolor = new Color /* 背景色組立 */
(backred,backgreen,backblue);
param = getParameter("mojired"); /* 文字赤色パラメータ取込 */
mojired = (param != null)? /* 入力判定(無指定時:0) */
Integer.parseInt(param): 0;
param = getParameter("mojigreen"); /* 文字緑色パラメータ取込 */
mojigreen = (param != null)? /* 入力判定(無指定時:0) */
Integer.parseInt(param): 0;
param = getParameter("mojiblue"); /* 文字青色パラメータ取込 */
mojiblue = (param != null)? /* 入力判定(無指定時:MAX) */
Integer.parseInt(param): 255;
mojicolor = new Color /* 文字色組立 */
(mojired,mojigreen,mojiblue);
param = getParameter("shinred"); /* 輝き赤色パラメータ取込 */
shinred = (param != null)? /* 入力判定(無指定時:MAX) */
Integer.parseInt(param): 255;
param = getParameter("shingreen"); /* 輝き緑色パラメータ取込 */
shingreen = (param != null)? /* 入力判定(無指定時:MAX) */
Integer.parseInt(param): 255;
param = getParameter("shinblue"); /* 輝き青色パラメータ取込 */
shinblue = (param != null)? /* 入力判定(無指定時:0) */
Integer.parseInt(param): 0;
shincolor = new Color /* 輝き色組立 */
(shinred,shingreen,shinblue);
} /* 初期化メソッド終了 */
/********** スタート(start)メソッド **********/
public void start() {
if ( kicker == null ) { /* kickerがnull?(停止中?) */
kicker = new Thread(this); /* YES:kickerを動作中に設定 */
kicker.start(); /* startを設定 */
}
} /* スタートメソッド終了 */
/*********** 繰り返し(run)メソッド ***********/
public void run() {
int i; /* カウンタ・クラス変数宣言(正数)*/
while (true) { /* 繰り返し */
try { /* 割り込み確認 */
for(i=0; i<no-1; i++) { /* 文字の数だけ繰り返す */
bef = msg.substring(0, i); /* 先頭からカウンタまでの文字切出 */
cen = msg.substring(i, i+1);/* カウンタの示す文字を切出 */
kicker.sleep(speed); /* 速度指定分待ち合わせ(mSEC) */
repaint(); /* 描画メソッド呼び出し */
}
kicker.sleep(speed); /* 次のサイクルの待ち合わせ(mSEC) */
} catch(InterruptedException e) {} /* 割り込み処理 */
}
} /* 繰り返しメソッド終了 */
/************ 更新(update)メソッド ***********/
public void update(Graphics g) { /* 画面のちらつきを無くす */
paint(g); /* 描画 */
} /* 更新メソッド終了 */
/************ 描画(paint)メソッド ************/
public void paint(Graphics g) {
grf.setColor(backcolor); /* 背景色設定 */
grf.fillRect(0,0,d.width,d.height); /* 背景色で背景を塗りつぶす */
FontMetrics fm = getFontMetrics(font); /* フォント情報取得 */
grf.setFont(font); /* フォント設定 */
width = fm.stringWidth(bef); /* 輝く文字を表示する位置を取得 */
grf.setColor(mojicolor); /* 文字色設定 */
grf.drawString(msg,0,y_Point); /* 文字情報設定 */
grf.setColor(shincolor); /* 輝き色設定 */
grf.drawString(cen,width,y_Point); /* 輝く文字情報設定 */
g.drawImage(offs,0,0,this); /* 描画設定 */
} /* 描画メソッド終了 */
/********** ストップ(stop)メソッド *********/
public void stop() {
if( kicker != null ) { /* kickerがnullでない?(動作中?) */
kicker.stop(); /* kickerを停止に設定 */
kicker = null; /* kickerに停止状態を設定 */
}
} /* ストップメソッド終了 */
} /* クラス設定終了 */
/**********************************************************************************
* 輝く文字アプレット終了 *
**********************************************************************************/