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){}
          }
     }
}