import java.awt.*; /** Een wijzerplaat bestaat uit een eenvoudige * cirkel en een roterende straal. De richting * van de straal wordt bepaald door de veranderlijke * "waarde" die varieert van 0 (omhoogwijzend) * tot 59, roterend in de zin van de wijzers van * de klok. * @author Lieven Smits * @version 1.0 25/7/2000 */ class Wijzerplaat extends Panel implements Runnable { /** Horizontale coordinaat van het middelpunt van * de wijzerplaat ten opzichte van de linkerbovenhoek * van het paneel. */ public static int middelpuntX = 60; /** Verticale coordinaat van het middelpunt van * de wijzerplaat ten opzichte van de linkerbovenhoek * van het paneel. */ public static int middelpuntY = 60; /** Straal van de cirkel van de wijzerplaat. */ public static int straal = 50; /** Stand van de wijzer. Wordt gemeten van 0 tot * 59, te beginnen bovenaan en in wijzerzin. */ int waarde = 0; /** Aantal omwentelingen van de wijzer per minuut. */ double snelheid; /** Construeer een wijzerplaat met gegeven snelheid. * @param snelheid * Aantal omwentelingen van de wijzer per minuut. */ Wijzerplaat(double snelheid) { this.snelheid = snelheid; } /** Oneindige animatielus. */ public void run() { try { while (true) { Thread.sleep((long) (1000 / snelheid)); waarde++; if (waarde >= 60) waarde %= 60; repaint(); } } catch (InterruptedException e) { return; } } /** Teken de wijzerplaat: een cirkel en een veranderlijke * straal. */ public void paint(Graphics g) { g.drawOval(middelpuntX - straal, middelpuntY - straal, 2 * straal, 2 * straal); double hoek = 2 * Math.PI / 60 * waarde; // in radialen g.drawLine(middelpuntX, middelpuntY, (int)(middelpuntX + straal * Math.sin(hoek)), (int)(middelpuntY - straal * Math.cos(hoek))); } } /** Animatieprogramma met drie wijzerplaten met * verschillende snelheden. * @author Lieven Smits * @version 1.0 25/7/2000 */ public class DrieWijzers extends Frame { /** Linkerwijzer: snel. */ Wijzerplaat w1 = new Wijzerplaat(100); /** Middelste wijzer: matig. */ Wijzerplaat w2 = new Wijzerplaat(10); /** Rechterwijzer: traag. */ Wijzerplaat w3 = new Wijzerplaat(1); /** Construeer een reeks van drie wijzerplaten. */ DrieWijzers() { setLayout(new GridLayout(1, 3, 10, 10)); add(w1); add(w2); add(w3); new Thread(w1).start(); new Thread(w2).start(); new Thread(w3).start(); } /** Toon een venster met drie wijzerplaten naast elkaar. */ public static void main(String[] args) { DrieWijzers d = new DrieWijzers(); d.setSize( 3 * (Wijzerplaat.straal + Wijzerplaat.middelpuntX + 10) + 50, Wijzerplaat.straal + Wijzerplaat.middelpuntY + 50); d.show(); } }