/* * * Copyright (c) 1996 - 1998 * Frank Buss (fb@frank-buss.de), Stephan Schloepke (stephan@nordrhein.net) * * This applet was published in the book: * * "Programmier Training Java, In 15 Stunden topfit" * ISBN 3-8158-1303-4 * Authors: Frank Buss, Stephan Schloepke * Data Becker Verlage (http://www.databecker.de) * * You can get this applet and more at http://www.frank-buss.de * */ // // eine Uhr in Java // import java.applet.*; import java.awt.*; import java.util.*; class fPoint { public double x; public double y; public fPoint(double x,double y) { this.x=x; this.y=y; } } public class Uhr extends Applet implements Runnable { Thread Animation; private Image Buffer; private Graphics gBuffer; private static int mitte=72; private int altSek; private Image uhrBild; public void start() { if (Animation==null) { Animation = new Thread (this); Animation.start(); } } public void stop() { if (Animation != null) { Animation.stop(); Animation = null; } } public void run() { while (true) { try { Animation.sleep (50); } catch (Exception e) {} repaint(); } } public void update(Graphics g) { paint(g); } public void init() { uhrBild=getImage(getDocumentBase(),"Uhr.gif"); MediaTracker tracker=new MediaTracker(this); tracker.addImage(uhrBild,0); try { tracker.waitForID(0); } catch (InterruptedException e) {} Buffer=createImage(uhrBild.getWidth(this),uhrBild.getHeight(this)); gBuffer=Buffer.getGraphics(); altSek=-1; } public void paint(Graphics g) { g.drawImage(Buffer,0,0,this); Date d=new Date(); int sek=d.getSeconds(); if (sek!=altSek) { altSek=sek; int min=d.getMinutes(); int stu=d.getHours(); gBuffer.drawImage(uhrBild,0,0,this); gBuffer.setColor(Color.black); drawZeiger(stu*5+min/12,37,2,4); drawZeiger(min,60,2,4); drawZeiger(sek,60,1.1,10); } } private fPoint holeVektor(int winkel, double laenge) { winkel=winkel+30; return new fPoint(Math.sin(Math.PI/30*winkel)*laenge,Math.cos(Math.PI/30*winkel)*laenge); } private int runden(double x) { return (int)Math.round(x); } private void drawZeiger(int winkel,double laenge,double breite,double ueber) { fPoint e=holeVektor(winkel,laenge); fPoint a=holeVektor(winkel+30,ueber); fPoint r=holeVektor(winkel+15,breite); Polygon z=new Polygon(); z.addPoint(runden(a.x+r.x+mitte),runden(a.y+r.y+mitte)); z.addPoint(runden(a.x-r.x+mitte),runden(a.y-r.y+mitte)); z.addPoint(runden(e.x-r.x+mitte),runden(e.y-r.y+mitte)); z.addPoint(runden(e.x+r.x+mitte),runden(e.y+r.y+mitte)); gBuffer.fillPolygon(z); } }