/********************************************************************************** * * * 文字をスクロール表示するJavaアプレット * * ( Scroller.java ) * * Author : Seiichi Inoue * **********************************************************************************/ /****************** << インポートパッケージクラス定義 >> ********************/ import java.applet.*; /* Appletパッケージの全て */ import java.awt.*; /* Abstract Windowing Toolkitパッケージの全て*/ /************************ << 自分のクラス定義 >> ****************************/ // クラス名称 : Scroller // アクセス制御: public(どのクラスからもアクセス可能) // 継承クラス : Applet // 引継クラス : Runnable public class Scroller extends Applet implements Runnable { /************************ << クラス属性の定義 >> ****************************/ Dimension d; /* 表示領域 */ String s[]; /* 文字配列領域 (文字)*/ Thread kicker = null; /* キッカー (スレッド)*/ int xScroll; /* スクロール位置 (正数)*/ int y_Point; /* 文字の縦位置 (正数)*/ Font font; /* フォント (フォント)*/ int strHeight,strWidth; /* 文字列高さ、幅 (正数)*/ int maxText; /* 文字ブロック数 (正数)*/ int curTextCount = 0; /* 現在の文字ブロック (正数)*/ int red,blue,green; /* 文字色 (正数)*/ Color color; /* 文字色 (カラー)*/ int speed; /* スクロール速度 (正数)*/ Image offs; /* オフスクリーン (イメージ)*/ Graphics grf; /* 描画領域 (グラフィック)*/ /******************* << クラスのメソッド(実行手順) >> *********************/ // /************* 初期化(init)メソッド ***************/ public void init() { d = size(); /* 表示画面サイズ情報を設定 */ xScroll = d.width; /* 表示開始位置を設定 */ offs = createImage(d.width,d.height); /* オフスクリーン用イメージ エリア作成 */ grf = offs.getGraphics(); /* イメージ表示のための Graphicsオブジェクト取出 */ String param = getParameter("speed"); /* 入力パラメータ"speed"取込 */ speed = (param != null)? /* 入力判定(無指定時は1) */ Integer.parseInt(param): 1; if(speed < 1 && speed > 5) { /* 入力異常判定( <1? , >5? ) */ speed = 1; /* 異常の時は1を設定 */ } param = getParameter("maxText"); /* テキストブロック数取込 */ maxText = (param != null)? /* 入力判定(無指定時は1) */ Integer.parseInt(param): 1; s = new String[maxText]; /* 文字配列の作成 */ int i=0; /* ループカウント初期化 */ do { /* DOループ (文字配列作成) */ param = getParameter("text" + (i+1)); /* i+1番目のテキスト取込 */ if(param != null) { /* テキスト有無判定 */ s[i] = new String(param); /* 有(テキストを配列に設定) */ } else { /* 無 */ if( i==0 ) { /* テキストが1つも無い? */ s[i] = "Text Parameter Erorr"; /* テキスト指定異常を設定 */ } maxText = i + 1; /* テキストブロック数を設定 */ } } while(param != null && ++i != maxText); /* DOループ終了判定 */ font = new Font("Dialog",Font.BOLD,20); /* 表示フォント設定 */ strHeight = (getFontMetrics(font)).getLeading(); /* 表示位置(縦)設定 */ strHeight -= (getFontMetrics(font)).getDescent(); strHeight += (getFontMetrics(font)).getAscent(); y_Point = (d.height + strHeight - (getFontMetrics(font)).getDescent())/2; } /* 初期化メソッド終了 */ /************** 実行(run)メソッド *****************/ public void run() { Thread.currentThread().setPriority(Thread.NORM_PRIORITY-3); while (kicker != null) { /* kickerがnullになるまで繰返*/ repaint(); /* 描画 */ try { /* 割り込み確認 */ Thread.sleep( 20 ); /* 待ち時間を20ミリ秒設定 */ } catch (InterruptedException e) {} /* 割り込み処理 */ } kicker = null; } /* 実行メソッド終了 */ /************* 更新(update)メソッド ***************/ public void update(Graphics g) { paint(g); } /* 更新メソッド終了 */ /************** 描画(paint)メソッド ***************/ public void paint(Graphics g) { grf.setFont(font); /* 表示フォントの設定 */ grf.setColor(Color.black); /* 表示背景色の設定 */ grf.fillRect(0, 0, d.width, d.height); /* 表示領域を塗る */ if (xScroll == d.width) { /* 表示位置が先頭? */ String param = getParameter("red"); /* 赤色の指定を取込 */ red = (param != null)? /* 無指定時最大値 */ Integer.parseInt(param): 255; param = getParameter("blue"); /* 青色の指定を取込 */ blue = (param != null)? /* 無指定時最大値 */ Integer.parseInt(param): 255; param = getParameter("green"); /* 緑色の指定を取込 */ green = (param != null)? /* 無指定時最大値 */ Integer.parseInt(param): 255; color = new Color(red,green,blue); /* 表示色を設定 */ curTextCount ++ ; if (curTextCount > maxText) { /* 文字ブロックオーバー? */ curTextCount = 1; /* YES:最初のブロック設定 */ } strWidth = (getFontMetrics(font)). /* 文字列の幅を取込 */ stringWidth(s[curTextCount - 1]); } grf.setColor(color); /* 表示色設定 */ xScroll -= speed; /* スピード指定分位置を減算 */ grf.drawString(s[curTextCount-1], /* ずらした文字を表示 */ xScroll,y_Point); if(xScroll < -strWidth) { /* 表示終了判定 */ xScroll = d.width; /* 終了時に表示位置を初期化 */ } g.drawImage(offs, 0, 0, this); /* イメージ表示 */ } /* 描画メソッド終了 */ /************* スタート(start)メソッド ************/ public void start() { if (kicker == null) { /* kickerがnull?(停止中?) */ kicker = new Thread(this); /* YES:kickerを動作中に設定 */ kicker.start(); } } /* スタートメソッド終了 */ /************* ストップ(stop)メソッド *************/ public void stop() { if (kicker != null) { /* kickerがnullでない?(動作中?)*/ kicker.stop(); kicker = null; /* YES:kickerを停止に設定 */ } } /* ストップメソッド終了 */ } /* クラス設定終了 */ /********************************************************************************** * スクロールアプレット終了 * **********************************************************************************/