Die Klasse Uhr:
package test.informatik10.uhr;
import sge.*;
/**
* Die Klasse Uhr stellt eine Bahnhofsuhr dar
*
* @author Martin Pabst
* @version 16.08.2017
*/
public class Uhr implements TimerListener
{
private double mitteX = 300;
private double mitteY = 300;
private double radius = 250;
private Sekundenzeiger sekundenzeiger;
private Linie minutenzeiger;
private Linie stundenzeiger;
/**
* Konstruktor für Objekte der Klasse Uhr
*/
public Uhr()
{
Fenster fenster = new Fenster();
fenster.setHintergrundfarbe("weiß");
ticksZeichnen(); // kleine Striche außen am Zifferblatt
zeigerZeichnen();
Timer timer = new sge.Timer(this, 1000);
timer.start();
}
public void timerSignalVerarbeiten(){
sekundenschritt();
}
private void sekundenschritt(){
sekundenzeiger.drehenUm(mitteX, mitteY, 6);
minutenzeiger.drehenUm(mitteX, mitteY, 0.1);
stundenzeiger.drehenUm(mitteX, mitteY, 0.1/12);
}
private void zeigerZeichnen()
{
stundenzeiger = new Linie(mitteX, mitteY + 0.2* radius, mitteX, mitteY - radius*4/5);
stundenzeiger.setRandstaerke(12);
minutenzeiger = new Linie(mitteX, mitteY + 0.2 * radius, mitteX, mitteY - radius*11/12);
minutenzeiger.setRandstaerke(8);
sekundenzeiger = new Sekundenzeiger(mitteX, mitteY, radius);
}
private void ticksZeichnen(){
Rechteck tick;
for(int i = 0; i < 60; i++){
// Erzeugen eines neuen Rechtecks auf der 12 Uhr-Position:
if(i % 5 == 0){
tick = new Rechteck(mitteX - 5, mitteY - radius, 10, radius * 1/7);
} else {
tick = new Rechteck(mitteX - 3, mitteY - radius, 6, radius * 1/21);
}
tick.drehenUm(mitteX, mitteY, i*6);
tick.setFuellfarbe("schwarz");
}
}
// public void ziffernZeichnen(){
// for(int i = 0; i < 12; i++){
// float winkel = 30*i;
// Textfeld t = new Textfeld(mitteX, mitteY - radius - 30, "" + i%12);
// t.setAusrichtungX(Ausrichtung.zentriert);
// t.setAusrichtungY(Ausrichtung.zentriert);
// t.drehenUm(mitteX, mitteY, winkel);
// }
// }
}
Die Klasse Sekundenzeiger
package test.informatik10.uhr;
import sge.Dreieck;
import sge.Kreis;
public class Sekundenzeiger {
private Kreis kreisMitte;
private Kreis kreisAussenRot;
private Kreis kreisAussenWeiss;
private Dreieck dreieck;
public Sekundenzeiger(double mitteX, double mitteY, double radius){
kreisMitte = new Kreis(mitteX, mitteY, radius/20);
kreisMitte.setFuellfarbe("rot");
double mitteYAussen = mitteY - radius * 0.6;
kreisAussenRot = new Kreis(mitteX, mitteYAussen, radius/10);
kreisAussenRot.setFuellfarbe("rot");
dreieck = new Dreieck(mitteX, mitteY - radius, radius/20, radius*6/5);
dreieck.setFuellfarbe("rot");
kreisAussenWeiss = new Kreis(mitteX, mitteYAussen, radius/20);
kreisAussenWeiss.setFuellfarbe("weiß");
}
public void drehenUm(double mitteX, double mitteY, double winkel){
kreisMitte.drehenUm(mitteX, mitteY, winkel);
kreisAussenWeiss.drehenUm(mitteX, mitteY, winkel);
kreisAussenRot.drehenUm(mitteX, mitteY, winkel);
dreieck.drehenUm(mitteX, mitteY, winkel);
}
}