InterClock.java
import java.awt.*;
import java.util.Date;
import java.util.Calendar; // 言語環境に対応した新しいクラス
import java.util.Locale; // 言語環境に対応した新しいクラス
import java.util.TimeZone; // 言語環境に対応した新しいクラス
import java.text.DateFormat; // 言語環境に対応した新しいクラス
/** 国際化対応の時計 InterClock クラス */
public class InterClock extends Canvas implements Runnable {
/** 言語環境に対応した時刻表示に必要なオブジェクト */
public Locale locale;
public TimeZone zone;
public Calendar cal;
public DateFormat form;
/** 時刻の更新を行うスレッド */
public Thread clock=null;
/** コンストラクタ */
public InterClock( Locale locale, TimeZone zone ) {
super();
this.locale = locale;
this.zone = zone;
setSize( 360, 40 );
clock = new Thread( this );
form = DateFormat.getDateTimeInstance(
DateFormat.FULL, DateFormat.FULL, locale );
}
/** 最初に呼び出されるメソッド */
public static void main( String argv[] ) {
InterClock clock
= new InterClock( Locale.getDefault(),
TimeZone.getDefault() );
ExitableFrame frame
= new ExitableFrame( "Inter Clock" );
frame.add( clock, "Center" );
frame.pack();
frame.show();
clock.clock.start();
}
/** 表示(初期状態)を行うメソッド */
public void paint( Graphics g ) {
g.setColor( Color.black );
g.fillRect( 0, 0, getSize().width, getSize().height );
}
/** 表示の変更を行うメソッド */
public void update( Graphics g ) {
// 言語環境に合わせて現在の日時とその表示のオブジェクトを得る
cal = Calendar.getInstance( zone );
Date date = cal.getTime();
String str = form.format( date );
paint( g );
g.setColor( Color.yellow );
g.drawString( str, 4, 28 );
}
/** 独立したスレッドによる処理 */
public void run() {
while( clock.isAlive() ) {
repaint();
try {
Thread.sleep(500); //一時停止
}
catch (InterruptedException e){}
}
}
}