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){ /* 形式上必要 */ }
             }
       }
}