InterClocks.java
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Color;
import java.util.Date;
import java.util.Locale; // 言語環境に対応した新しいクラス
import java.util.TimeZone; // 言語環境に対応した新しいクラス
import java.text.DateFormat; // 言語環境に対応した新しいクラス
import java.util.Calendar; // 言語環境に対応した新しいクラス
/** 複数のタイムゾーンの時計を表示するアプレット InterClocks クラスの定義 */
public class InterClocks extends Applet implements Runnable {
/** 言語環境に対応した時刻表示に必要なオブジェクト */
public Calendar cal[];
public DateFormat df[];
/** 時刻の更新を行うスレッド */
public Thread clock=null;
/** アプレットの初期設定を行うメソッド */
public void init() {
cal = new Calendar[3];
df = new DateFormat[3];
// 日本
df[0] = DateFormat.getDateTimeInstance( DateFormat.FULL,
DateFormat.FULL, Locale.JAPAN );
// イギリス
df[1] = DateFormat.getDateTimeInstance( DateFormat.FULL,
DateFormat.FULL, Locale.UK );
// アメリカ合衆国
df[2] = DateFormat.getDateTimeInstance( DateFormat.FULL,
DateFormat.FULL, Locale.US );
}
/** アプレットの表示(初期状態)を行うメソッド */
public void paint( Graphics g ) {
g.setColor( Color.black );
g.fillRect( 0, 0, getSize().width, getSize().height );
}
/** アプレットの表示の変更を行うメソッド */
public void update( Graphics g ) {
// 言語環境に合わせて現在の日時とその表示のオブジェクトを得る
// 日本標準時
cal[0] = Calendar.getInstance( TimeZone.getTimeZone( "JST" ) );
// グリニッジ標準時
cal[1] = Calendar.getInstance( TimeZone.getTimeZone( "GMT" ) );
// アメリカ東海岸
cal[2] = Calendar.getInstance( TimeZone.getTimeZone( "PST" ) );
paint( g );
g.setColor( Color.yellow );
for( int i=0; i<3; i++ ) {
Date date = cal[i].getTime();
String str = df[i].format( date );
g.drawString( str, 4, 28 + 40*i );
}
}
/** アプレットが画面に現れた時に呼び出される */
public void start() {
if( clock == null ) {
clock = new Thread(this); //スレッド生成
clock.start(); //スレッド起動
}
}
/** アプレットが画面から消えた時に呼び出される */
public void stop() {
if( clock != null ) {
clock.stop(); //スレッド停止
clock = null; //スレッド消去
}
}
/** アプレットが続行する作業 */
public void run() {
while( clock.isAlive() ) {
repaint();
try {
Thread.sleep(500); //一時停止
}
catch (InterruptedException e){ /* 形式上必要 */ }
}
}
}