/********************************************************************************** * * * 輝く文字のアプレット * * 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に停止状態を設定 */ } } /* ストップメソッド終了 */ } /* クラス設定終了 */ /********************************************************************************** * 輝く文字アプレット終了 * **********************************************************************************/