Timer (2) Eine Fenster-Anwendung mit Timer
Wir bauen uns eine Ampel
Klicken Sie auf die Schaltfläche "Frame", um den Programmrahmen für eine Anwendung anzulegen: Geben Sie Ihrem Projekt den Namen "Ampel" und speichern Sie es in einem eigenen Ordner. | . |
Sehen Sie sich dann den Code an:
Der Javaeditor erzeugt Importanweisungen für java.awt.*
und java.awt.event.*.
sodann erzeugt er die Klasse public class Ampel extends Frame
mit der Konstruktor-Methode public Ampel(String title)
und der Methode public static void main(String[] args),
die durch Aufruf des Konstruktors ein Objekt der Klasse "Ampel" produziert.
Es enthält ein Fenster der Größe 300x300 Pixel und darin ein Panel, auf dessen
Grafik-Oberfläche man zeichnen kann.
Diese Klasse wollen wir nun mit Funktionalität versehen.
Als erstes benötigen wir einen Timer zur Steuerung unserer Ampel. Wir finden
ihn in der Utilities-Bibliothek.
Fügen Sie bei den Importanweisungen hinzu: import java.util.*;
Im Abschnitt "Attribute" erzeugen wir drei Variablen:
Timer ticker = new Timer();
Graphics bild; //*
int zustand = 0;
Die erste übergibt unserem Objekt die Adresse eines Timers namens
ticker,
die zweite dient zur Speicherung der Adresse des Grafikkontexts
bild des Panels in unserem Fenster,
die dritte merkt sich zwischen zwei Uhrtickern den Zustand unserer Ampel.
Der Konstruktor baut das Fenster auf, fügt zusätzliche Komponeneten ein (bei
uns nicht) und macht es sichtbar.
Er endet bisher mit der Anweisung setVisible=true;
Hinter diese Anweisung (aber vor die abschließende Klammer des Konstruktors)
fügen wir einige zusätzliche Anweisungen ein, die nur einmal beim Programmstart
ausgeführt werden:
try {Thread.sleep(500);}
// gibt dem Formaufbau etwas zusätzliche Zeit
catch (Exception e) {};
bild = cp.getGraphics();
// meldet der Variablen bild die Adresse der Grafik des Panels
bild.setColor(Color.black);
// zeichnet ein schwarzes Rechteck als Ampel
bild.fillRect(120,10,60,220);
bild.setColor(Color.white);
// und drei weiße Kreise, die Umrisse der Lampen
bild.drawOval(130,20,40,40);
bild.drawOval(130,80,40,40);
bild.drawOval(130,140,40,40);
ticker.scheduleAtFixedRate(tJob, 0, 1000); // startet
den Auftrag tJob des Timers
Der Timerauftrag wird alle 1000-Millisekunden ausgeführt. Er ist im Abschnitt zwischen "Anfang Methoden" und "Ende Methoden" einzufügen und lautet wie folgt:
TimerTask tJob = new TimerTask() { public void run() { if (zustand==0) { bild.setColor(Color.black); bild.fillOval(130,80,40,40); zustand=1; } else { bild.setColor(Color.yellow); bild.fillOval(130,80,40,40); zustand=0; } } }; |
Aufgaben: