// Java Programm das eine Uhr in einem Fenster anzeigt.

import java.awt.*;
import java.applet.*;
import java.util.Date;
public
class SimpleUhr extends Applet implements Runnable 
{
Date Datum; 
Thread Zeit;
int CenterX;
int CenterY;
int Laenge;
Image offScreenI;
Graphics goffScreen;

public String[][] getParameterInfo()
	{
	String[][] info = 
		{
		{"Dim","int","Dimension"}
		};
	return info;
	}

public void init()
	{
	Datum = new Date();
	CenterX = size().width/2;
	CenterY = size().height/2;
	Laenge = Integer.valueOf(getParameter("Dim")).intValue();;
	offScreenI = createImage(size().width,size().height);
	goffScreen = offScreenI.getGraphics();
	goffScreen.translate(CenterX,CenterY);
	}

public void start()
	{
	if (Zeit== null)
		{
		Zeit = new Thread(this);
		Zeit.start();
		};
	};
 
public void stop()
	{
	if (Zeit!= null)
		{
		Zeit.stop();
		Zeit = null;
		};
	};
 
public void run()	
	{
	while(1==1)
		{
		Datum = new Date();
		repaint();
		try
			{
			Zeit.sleep(200);
			}
		catch (InterruptedException e) 
			{
			System.out.print("Thread_interrupted");
			};
		} ;
	};

public void update(Graphics g)
	{
	if  (offScreenI != null)
		{
		goffScreen.translate(-CenterX,-CenterY);
		goffScreen.setColor(Color.blue.brighter().brighter());
		goffScreen.fillRect(0,0,size().width,size().height);
		goffScreen.setColor(Color.black);
		goffScreen.translate(CenterX,CenterY);
		DrawZifferBlatt(goffScreen);
		DrawZeiger(goffScreen);
		g.drawImage(offScreenI,0,0,this);
		}
	}

public void paint (Graphics g)
	{
	if (offScreenI != null)
		{
		g.drawImage(offScreenI,0,0,this);
		}
	}

public void DrawZeiger (Graphics g)
	{
	int Sek,Min,Std;
	Sek = Datum.getSeconds();
	Min = Datum.getMinutes();
	Std = Datum.getHours()%12;

	DrawRadialLine(g,0,(int)(1.8*Laenge),Sek*(Math.PI/30));
	DrawRadialLine(g,0,(int)(2*Laenge),Min*(Math.PI/30));
	DrawRadialLine(g,0,(int)(1.2*Laenge),Std*5*(Math.PI/30)
					+Min*(Math.PI/360));
	}

public void DrawRadialLine(Graphics g,/* int CX,int CY,*/
			  int StartRadius,int EndRadius,double W)
	{
	double XOff,YOff;
	int StartX,StartY,EndeX,EndeY;

	StartY = -(int)(StartRadius*Math.cos(W));
	StartX= (int)(StartRadius*Math.sin(W));
	EndeY =-(int)(EndRadius*Math.cos(W));
	EndeX =(int)(EndRadius*Math.sin(W));
	g.drawLine(StartX,StartY,EndeX,EndeY);
	};

public void DrawZifferBlatt (Graphics g)
	{
	g.setColor(Color.white);
	g.fillOval((int)(-Laenge*2.2),(int)(-Laenge*2.2),
		   (int)(Laenge*4.4),(int)(Laenge*4.4));
	g.setColor(Color.black);
	for (int i = 0; i <12; i++)
		{
		DrawRadialLine(g,(int)(Laenge*1.8),(int)(Laenge*2.1),i*5*(Math.PI/30));
		};
	};

} 