/**********************************************************************************
* *
* リアルタイム時計 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に停止状態を設定 */
}
} /* ストップメソッド終了 */
} /* クラス設定終了 */
/**********************************************************************************
* リアルタイム時計アプレット終了 *
**********************************************************************************/