import java.applet.*; import java.awt.*; import java.awt.event.*; import java.math.*; import java.util.*; // @autor Thilo Beckmann // @version 11.11.2003 // Dieses Applet stellt eine Uhr mit realistischer Zeigerbewegung dar... public class uhr extends Applet { int top = 20; // Abstand zum oberen Rand int left = 20; // Abstand zum linken Rand int radius = 200; // Radius der Uhr int xmit = radius + top; // Mittelpunkt des Uhr-Kreises (x-Wert) int ymit = radius + left; // Mittelpunkt des Uhr-Kreises (y-Wert) int sekunden; // sekunden variable int minuten; // minuten variable int stunden; // stunden variable zweibuttons b; private String zeit; // die aktuelle Uhrzeit // Mit den folgenden Instanzvariablen wird die Uhrzeit unserer Zeitzone verfuegbar gemacht // Es werden Methoden aus dem Paket java.util.* verwendet String[] ids = TimeZone.getAvailableIDs(60 * 60 * 1000); SimpleTimeZone pdt = new SimpleTimeZone(60 * 60 * 1000, ids[0]); Calendar calendar = new GregorianCalendar(pdt); public void init() { setBackground(Color.white); } void pause (int dauer) { try { Thread.sleep(dauer); } catch(InterruptedException e) { return; } } // Hier wird die Uhr gezeichnet: public void paint (Graphics g) { // Endlosschleife: for (int d = 0; d < 1; d=d+0) { g.setColor (Color.black); g.drawOval (top,left,radius*2,radius*2); // Kreis zeichnen calendar.setTime(new Date()); // Uhrzeit aktualisieren zeit = " " + calendar.get(Calendar.HOUR_OF_DAY) + ":" + calendar.get(Calendar.MINUTE) + ":" + calendar.get(Calendar.SECOND); sekunden = (int)calendar.get(Calendar.SECOND); // Variablen belegen minuten = (int)calendar.get(Calendar.MINUTE); // damit können die alten stunden = (int)calendar.get(Calendar.HOUR); // Zeiger gelöscht werden g.drawString (zeit,10,450); // Die Zeit wird einmal digital angezeigt g.setColor (Color.black); g.drawLine(xmit, ymit, xmit + ((int) ((radius-(radius/100*5)) * Math.cos((sekunden -15)*Math.PI/30))), ymit + ((int) ((radius-(radius/100*5)) * Math.sin((sekunden -15)*Math.PI/30)))); for (int i = 0; i < 720; ++i) { g.drawLine(xmit + ((int) ((radius-(radius/100*1)) * Math.cos(i*Math.PI/30))), ymit + ((int) ((radius-(radius/100*1)) * Math.sin(i*Math.PI/30))), xmit + ((int) ( radius * Math.cos(i*Math.PI/30))), ymit + ((int) ( radius * Math.sin(i*Math.PI/30)))); } g.setColor(Color.blue); g.drawLine(xmit, ymit, xmit + ((int) ((radius-(radius/100*10))* Math.cos((minuten-15+sekunden*1.0/60.0)*Math.PI/30))), ymit + ((int) ((radius-(radius/100*10))* Math.sin((minuten-15+sekunden*1.0/60.0)*Math.PI/30)))); g.setColor (Color.red); g.drawLine(xmit, ymit, xmit + ((int) ((radius-(radius/100*25))* Math.cos((stunden-3+minuten*1.0/60.0)*Math.PI/6))), ymit + ((int) ((radius-(radius/100*25))* Math.sin((stunden-3+minuten*1.0/60.0)*Math.PI/6)))); int hui; for (int i = 0; i < 720; ++i) { g.drawLine(xmit + ((int) ((radius-(radius/100*4)) * Math.cos(i*Math.PI/6))), ymit + ((int) ((radius-(radius/100*4)) * Math.sin(i*Math.PI/6))), xmit + ((int) ( radius * Math.cos(i*Math.PI/6))), ymit + ((int) ( radius * Math.sin(i*Math.PI/6)))); hui = (i+60)/60; if ((i%60) == 0) g.drawString(""+hui+"", xmit + ((int) ( (radius+(radius/100*5)) * Math.cos((hui-3)*Math.PI/6)))-2, ymit + ((int) ( (radius+(radius/100*5)) * Math.sin((hui-3)*Math.PI/6)))+2); } pause(500); // Alle Zeiger werden gelöscht, damit keine "Doppelzeiger" entstehen. g.setColor (Color.white); g.fillRect(10,420,70,50); g.drawLine(xmit, ymit, xmit + ((int) ((radius-(radius/100*5))* Math.cos((sekunden -15)*Math.PI/30))), ymit + ((int) ((radius-(radius/100*5))* Math.sin((sekunden -15)*Math.PI/30)))); g.drawLine(xmit, ymit, xmit + ((int) ((radius-(radius/100*10))* Math.cos((minuten-15+sekunden*1.0/60.0)*Math.PI/30))), ymit + ((int) ((radius-(radius/100*10))* Math.sin((minuten-15+sekunden*1.0/60.0)*Math.PI/30)))); g.drawLine(xmit, ymit, xmit + ((int) ((radius-(radius/100*25))* Math.cos((stunden-3+minuten*1.0/60.0)*Math.PI/6))), ymit + ((int) ((radius-(radius/100*25))* Math.sin((stunden-3+minuten*1.0/60.0)*Math.PI/6)))); } } }