JClock.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;   // 言語環境に対応した新しいクラス

/** 日本語対応の時計のアプレット JClock クラスの定義 */

public class JClock extends Applet implements Runnable {

    /** 言語環境に対応した時刻表示に必要なオブジェクト */

       public Calendar cal;
       public Date date;
       public DateFormat df;

    /** 時刻の更新を行うスレッド */

       public Thread clock=null;

    /** アプレットの初期設定を行うメソッド */

       public void init() {

             df = DateFormat.getDateTimeInstance( DateFormat.FULL,
                                                  DateFormat.FULL );
       }

    /** アプレットの表示(初期状態)を行うメソッド */

       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( TimeZone.getDefault() );
             // cal = Calendar.getDefault( TimeZone.getTimeZone( "JST" ) );
             date = cal.getTime();
             String str = df.format( date );

             paint( g );
             g.setColor( Color.yellow );
             g.drawString( str, 4, 28 );
       }

    /** アプレットが画面に現れた時に呼び出される */

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