/********************************************************************************** * * * リアルタイム時計 Javaアプレット * * ( RealClock.java ) * * Author : Seiichi Inoue * **********************************************************************************/ /******************** << インポートパッケージクラス定義 >> ******************/ import java.applet.Applet; /*Appletパッケージ */ import java.awt.*; /*Abstract Windowing Toolkitパッケージの全て*/ import java.util.Date; /*Dateパッケージ */ /**************************** << 自分のクラス定義 >> ************************/ // クラス名称 : RealClock // アクセス制御 : public(どのクラスからもアクセス可能) // 継承クラス : Applet // 引継クラス : Runnable(Threadを使用可能にする) public class RealClock extends Applet implements Runnable { /************************** << クラス変数属性の宣言 >> **********************/ Thread kicker=null; /* スレッド制御(初期値:停止) */ Dimension d; /* 表示領域 */ Image offs; /* オフスクリーンエリア */ Graphics grf; /* 描画領域 */ String param; /* パラメータ引き取り */ int red,green,blue; /* 時計文字色パラメータ情報 */ Color color; /* 時計文字色 */ int backred,backgreen,backblue; /* 背景色パラメータ情報 */ Color backcolor; /* 背景色 */ String fontname; /* 時計文字フォントパラメータ情報 */ int fontsize; /* 時計文字サイズパラメータ情報 */ Font font; /* 時計文字フォント */ int strHeight; /* 時計文字高さ */ int x; /* 表示開始位置(横) */ int y_Point; /* 表示位置(高さ) */ /******************** << クラスのメッソード指定(実行手順) >> **************/ /*********** 初期化(init)メッソード ***********/ public void init() { d = size(); /* 表示画面サイズ情報を設定 */ offs = createImage(d.width,d.height); /* オフスクリーン用表示エリア作成 */ grf = offs.getGraphics(); /* グラヒックオブジェクト取得 */ param = getParameter("font"); /* フォント種類パラメータ取込 */ fontname = (param != null)? /* 入力判定(無指定時:Dialog) */ param: "Dialog"; param = getParameter("fontsize"); /* フォントサイズパラメータ取込 */ fontsize = (param != null)? /* 入力判定(無指定時:35) */ Integer.parseInt(param): 35; font = new Font(fontname,Font.BOLD,fontsize); /* フォント設定 */ strHeight = (getFontMetrics(font)).getLeading(); /* 文字の縦位置計算 */ strHeight -= (getFontMetrics(font)).getDescent(); strHeight += (getFontMetrics(font)).getAscent(); y_Point = (d.height + strHeight /* 文字の縦位置セット */ - (getFontMetrics(font)).getDescent())/2; param = getParameter("x"); /* 表示開始位置パラメータ取込 */ x = (param != null)? /* 入力判定(無指定時:0) */ Integer.parseInt(param): 0; 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("red"); /* 文字赤色パラメータ取込 */ red = (param != null)? /* 入力判定(無指定時:MAX) */ Integer.parseInt(param): 255; param = getParameter("green"); /* 文字緑色パラメータ取込 */ green = (param != null)? /* 入力判定(無指定時:0) */ Integer.parseInt(param): 0; param = getParameter("blue"); /* 文字青色パラメータ取込 */ blue = (param != null)? /* 入力判定(無指定時:0) */ Integer.parseInt(param): 0; color = new Color(red,green,blue); /* 文字色組立 */ } /* 初期化メソッド終了 */ /********** スタート(start)メソッド **********/ public void start() { if ( kicker == null ) { /* kickerがnull?(停止中?) */ kicker = new Thread(this); /* YES:kickerを動作中に設定 */ kicker.start(); /* startを設定 */ } repaint(); /* 描画起動 */ } /* スタートメソッド終了 */ /*********** 繰り返し(run)メソッド ***********/ public void run() { Thread.currentThread().setPriority(Thread.NORM_PRIORITY-3); while( kicker != null) { /* kickerがnullになるまで繰り返し */ repaint(); /* 描画 */ try { /* 割り込み確認 */ kicker.sleep(1000); /* 待ち時間:1秒 */ } catch(InterruptedException e) {} /* 割り込み処理 */ } kicker = null; /* 繰り返し処理終了設定 */ } /* 繰り返しメソッド終了 */ /************ 更新(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); /* 背景色で背景を塗りつぶす */ Date d = new Date(); /* 時計情報を取込 */ grf.setColor(color); /* 文字色設定 */ grf.setFont(font); /* フォント情報設定 */ grf.drawString(d.toString(),x,y_Point); /* 表示情報設定 */ g.drawImage(offs,0,0,this); /* 描画設定 */ } /* 描画メソッド終了 */ /********** ストップ(stop)メソッド *********/ public void stop() { if( kicker != null ) { /* kickerがnullでない?(動作中?) */ kicker.stop(); /* kickerを停止に設定 */ kicker = null; /* kickerに停止状態を設定 */ } } /* ストップメソッド終了 */ } /* クラス設定終了 */ /********************************************************************************** * リアルタイム時計アプレット終了 * **********************************************************************************/