import java.awt.*;
import java.awt.event.*;
import java.awt.geom.AffineTransform;
import java.util.*;

import javax.swing.*;
import javax.swing.Timer;


/**
 * @author Remi Forax
 *
 */
public class Clock extends JComponent {

  public Clock() {
    timer=new Timer(1000,new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        repaint();
      }
    });
    timer.start();
  }

  protected void paintComponent(Graphics graphics) {
    super.paintComponent(graphics);
    
    Graphics2D g=(Graphics2D)graphics;
    
    int width=getWidth()/2;
    int height=getHeight()/2;
    
    int length=Math.min(width,height);
    
    g.translate(width, height);
    drawTicks(g,Color.DARK_GRAY,(int)(length*0.9),(int)(length*1.0));
    
    calendar.setTime(new Date(System.currentTimeMillis()));
    int hour=calendar.get(Calendar.HOUR);
    int minute=calendar.get(Calendar.MINUTE);
    int second=calendar.get(Calendar.SECOND);
    
    System.out.println(new Date());
    System.out.println(hour+" "+minute+" "+second);
    
    drawSwitch(g,hour*FULL_ANGLE/12.0,Color.RED,(int)(length*0.7));
    drawSwitch(g,minute*FULL_ANGLE/60.0,Color.BLACK,(int)(length*0.9));
    drawSwitch(g,second*FULL_ANGLE/60.0,Color.BLUE,(int)(length*0.8));
  }
  
  private void drawTicks(Graphics2D graphics,Color color,int startLength,int endLength) {
    Graphics2D g=(Graphics2D)graphics.create();
    
    AffineTransform base=g.getTransform();
    
    for(int i=0;i<12;i++) {
      double angle=i*FULL_ANGLE/12;
      AffineTransform transform=(AffineTransform)base.clone();
      transform.rotate(angle);
      g.setTransform(transform);
      g.drawLine(startLength,0,endLength,0);
    }
  }
  
  private void drawSwitch(Graphics2D g,double angle,Color color,int length) {
    g.rotate(angle);
    g.setColor(color);
    g.drawLine(0,0,0,-length);
  }
  
  public Dimension getPreferredSize() {
    return new Dimension(200,200);
  }

  private final Timer timer;
  private final static double FULL_ANGLE=2.0*Math.PI;
  private final GregorianCalendar calendar=new GregorianCalendar();

  public static void main(String[] args) {
    Clock clock=new Clock();
    
    JPanel panel=new JPanel();
    panel.add(clock);
    
    JFrame frame=new JFrame();
    frame.setContentPane(panel);
    frame.show();
  }
}
