初学很多东西还没弄明白!赐教 谢谢!
/**
 * @(#)TimerTest.java
 *
 *
 * @author
 * @version 1.00 2011/6/1
 */
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
public class TimerTest{
   public static void main(String[] args)
   {JFrame f = new TimerTestFrame();
      f.show();
   }
}class TimerTestFrame extends JFrame
{
   public TimerTestFrame()
   {
      setSize(550, 400);
      setTitle("TimerTest");
addWindowListener(new WindowAdapter()
         {
          public void windowClosing(WindowEvent e)
            {
             System.exit(0);
 }
         });      Container c = getContentPane();
      c.setLayout(new GridLayout(2, 3));
        c.setBackground(Color.red);
        c.setForeground(Color.green);
c.add(new ClockCanvas("San Jose", "GMT-8"));
      c.add(new ClockCanvas("Taipei", "GMT+8"));
      c.add(new ClockCanvas("Berlin", "GMT+1"));
      c.add(new ClockCanvas("New York", "GMT-5"));
      c.add(new ClockCanvas("Cairo", "GMT+2"));
      c.add(new ClockCanvas("Bombay", "GMT+5"));
          }
     }
      interface TimerListener{
      void timeElapsed(Timer t);
      class Timer extends Thread{
     private TimerListener target;
     private int interval;
     public Timer(int i, TimerListener t){
      target  = t;
     interval = i;
      setDaemon(true);
     }
     public void run(){
      try
      {
        while (!interrupted())
         {
          sleep(interval);
            target.timeElapsed(this);
}
      }
      catch(InterruptedException e) {}
   }
}
      }
   class ClockCanvas extends JPanel implements TimerListener{
   private int seconds=0 ;
   private String city;
   private int offset;
   private int hour;
   private int minutes;
   private final int LOCAL = 16;
    // private GregorianCalendar calendar;
     Calendar calendar=Calendar.getInstance();   public ClockCanvas(String c, String tz)
   {
      city = c;
calendar = new GregorianCalendar(TimeZone.getTimeZone(tz));
      Timer t = new Timer(1000, this);
      t.start();
      setSize(125, 125);
   }
   public void paintComponent(Graphics g){      super.paintComponent(g);
      Graphics2D gg=(Graphics2D)g;
      gg.setStroke(new BasicStroke(2.0f));
      gg.drawOval(0, 0, 100, 100);
     double hourAngle = 2 * Math.PI
         * (seconds - 3 * 60 * 60) / (12 * 60 * 60);
      double minuteAngle = 2 * Math.PI
         * (seconds - 15 * 60) / (60 * 60);
      double secondAngle = 2 * Math.PI
         * (seconds - 15) / 60;
            g.drawLine(50, 50, 50 + (int)(30
         * Math.cos(hourAngle)),
         50 + (int)(30 * Math.sin(hourAngle)));
       g.setColor(Color.blue);
      g.drawLine(50, 50, 50 + (int)(40 * Math.cos(minuteAngle)),
         50 + (int)(40 * Math.sin(minuteAngle)));
             g.setColor(Color.red);
       g.drawLine(50, 50, 50 + (int)(45 * Math.cos(secondAngle)),
         50 + (int)(45 * Math.sin(secondAngle)));      seconds =  calendar.get(Calendar.SECOND);
       hour=calendar.get(Calendar.HOUR);
       minutes=calendar.get(Calendar.MINUTE);
       gg.drawString(city+":现在时刻 "+hour+":"+minutes+":"+seconds, 0, 110);
       /* public void drawnum(Graphics g){
       /* for(int 1=1;i<=12;i++){
       /* g.drawString(""+i,45+(int)(Math.cos(i*Math.PI/6)),45+(int)Math.sin(i*Math.PI/6)));
        *}
        *}  此处是为了在时钟上标示出数字,帮忙解决下这个问题!最好怎么实现?直接访问paintComponent的参数g不行这是为什么?        **/
   }
public void timeElapsed(Timer t)
   {
      calendar.setTime(new Date());//此处无法访问Date()
      seconds = calendar.get(Calendar.HOUR) * 60 * 60
+ calendar.get(Calendar.MINUTE) * 60
                 + calendar.get(Calendar.SECOND);
                 repaint();
              }
}