Ampelsteuerung mit Timer

Kanissell

Mitglied
hi,

ich habe hier meine Ampelsteuerung implementiert:
Java:
public class Ampelsteuerung implements ActionListener{


    protected Ampel[] ampeln;
    
    public void actionPerformed(ActionEvent e){
        if (e.getActionCommand().equals("NEXT_PHASE")){
        for (Ampel ampel : this.ampeln) {
            ampel.toNextPhase();
            }
        }
    }




}
und hier meine public class Ampel:

Java:
public class Ampel implements Drawable {
    
    protected int x;
    protected int y;
    protected String phase;
    
    public Ampel(int x, int y, String phase){
        this.x = x;
        this.y = y;
        this.phase = phase;
    }
    
    public Ampel(int x, int y){
        this.phase = Ampelphase.rot;
        this.x = x;
        this.y = y;
    }
    
    public Ampel(Ampel a){
        this.x = a.x;
        this.y = a.y;
        this.phase = a.phase;
    }
    
    public String toString(){
        return String.format("[X = %03d Y = %03d Phase = %03s]", x, y, phase);
    }


    public void toNextPhase(){
        if (phase == "rot"){
            phase = Ampelphase.rotGelb;
        }
        if (phase == "rotGelb"){
            phase = Ampelphase.gruen;
        }
        if (phase == "gelb"){
            phase = Ampelphase.rot;
        }
        if (phase == "grün"){
            phase = Ampelphase.gelb;
        }
    }
    
    public void draw(Graphics g){
        g.setColor(Color.GRAY);
        g.fillRect(x, y, 100, 200);
        
        if (phase == "rot"){
            g.setColor(Color.RED);
            g.fillOval(x + 25 , y + 15, 50, 50);
            g.setColor(Color.LIGHT_GRAY);
            g.fillOval(x + 25, y + 70, 50, 50);
            g.setColor(Color.LIGHT_GRAY);
            g.fillOval(x + 25, y + 125, 50, 50);
        }
        if (phase == "gelb"){
            g.setColor(Color.LIGHT_GRAY);
            g.fillOval(x + 25 , y + 15, 50, 50);
            g.setColor(Color.YELLOW);
            g.fillOval(x + 25, y + 70, 50, 50);
            g.setColor(Color.LIGHT_GRAY);
            g.fillOval(x + 25, y + 125, 50, 50);
        }
        if (phase == "grün"){
            g.setColor(Color.LIGHT_GRAY);
            g.fillOval(x + 25 , y + 15, 50, 50);
            g.setColor(Color.LIGHT_GRAY);
            g.fillOval(x + 25, y + 70, 50, 50);
            g.setColor(Color.GREEN);
            g.fillOval(x + 25, y + 125, 50, 50);
        }
        
        
    }


}
in der Klasse Ampeltest sollen wir nun die Ampeln ausgeben lassen mit dem timer:

Java:
public class Ampeltest {


    public static void main(String[] args) {
        DirtyPainter painter = new DirtyPainter();
        Ampel a = new Ampel(3, 3);
        Ampelsteuerung steuerung = new Ampelsteuerung();
        Timer timer = new Timer(1500, steuerung);
        timer.setActionCommand("NEXT_PHASE");
        timer.addActionListener(steuerung);
        timer.start();
        painter.add(a);
        painter.showDrawing();
        


    }


}

meine Frage ist jetzt, wie ich der Ampelsteuerung bescheid geben kann, das der Timer gestartet ist und er alle Ampeln im Array umschalten soll ?

Ampelsteuerung, Ampel und Ampeltest sind eigene public classes.

Danke für eure Antworten
 

InfectedBytes

Top Contributor
Deine Ampelsteuerung wird automatisch alle 1,5 Sekunden benachrichtigt. Das Problem ist vermutlich dass du die Änderung nur nicht siehst, da du keine repaint() Aufruf machst.
Füge in deiner Ampel einfach mal einen repaint()-Aufruf am Ende der toNextPhase() Methode ein.
(bzw. wie auch immer Drawable zum neuzeichnen angeregt wird^^)

Ansonsten fügst du deine Steuerung zweimal als listener hinzu.
Dem Timer Konstruktor übergibst du den Listener und außerdem fügst du ihn nochmal mit addListener hinzu.
 
Zuletzt bearbeitet:

Kanissell

Mitglied
hi,

das mit dem repaint hab ich dann nach der toNextPhase eingefügt im Aufruf

Java:
public class Ampelsteuerung implements ActionListener{


	protected Ampel[] ampeln;
	
	public Ampelsteuerung(Ampel[] ampel){
		this.ampeln = ampel;
	}
	
	public void actionPerformed(ActionEvent e){
		DirtyPainter painter = new DirtyPainter();
		if (e.getActionCommand().equals("Next_Phase")){
		for (Ampel traffic : this.ampeln) {
			traffic.toNextPhase();
			painter.add(traffic);
			}
		painter.showDrawing();
		}
		
	}

aber irgendwie ist der Phasenübergang falsch, er springt von Rot nach Grün und umgekehrt und bei Gelb bleibt er auf Gelb..
 
Zuletzt bearbeitet von einem Moderator:

InfectedBytes

Top Contributor
Wie gesagt, du fügst den Listener zweimal hinzu, einmal durch den Konstruktor und einmal durch addListener
Java:
Timer timer = new Timer(1500, steuerung);
timer.addListener(steuerung)
Daher wird der Code auch zweimal ausgeführt.
Entferne einfach das addListener
 

Kanissell

Mitglied
Aso, sorry hab mich da wohl bisschen verlesen :)

Es klappt jetzt zu 90%, manchmal springt er immernoch von grün nach rot, aber nur alle 5 schritte
 

egos

Mitglied
@Kanissell
Als blutiger Anfänger hat mich dein Programm sehr interessiert. Was ich nicht herausgefunden habe: wo findet man den DirtyPainter? das gibt bei mir einen Fehler. Ebenso die Anweisung ...implements Drawable. Gibt es dazu eine Importanweisung?
Gruss Oski
 

Kanissell

Mitglied
@egos

hi,

der DirtyPainter hat unser Prof selber geschrieben, er wollte uns damit das Leben leichter machen ( was ich aber nicht finde :D )

du kannst anstatt den Dirtypainter einfach den aufruf ampel.repaint machen, macht genau das gleiche.

und Drawable hat uns auch gegeben, es gibt aber sicherlich ein äquivalent dazu.

Falls du die Bibliotheken haben willst, schreib mir und ich schicke sie dir :)
 

egos

Mitglied
@Karnissell

Danke für die Antwort und dein Angebot. Ich möchte nur mit der SE arbeiten, ohne "Fremdbibliotheken". Es gibt bei mir noch einige Fehler mehr. Zum Beispiel Ampelphase.rot usw. kann Java nicht verarbeiten. Auch ampel.repaint wird nicht akzeptiert. Bei der Instanzierung von Ampelsteuerung wird ein undefinierter Konstruktor gemeldet.
Ich versuche es auf einem anderen Weg.
Gruss Oski
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Programmierung Ampelsteuerung Java Basics - Anfänger-Themen 4
S Timer vs ExecutorService: jeden Sonntag um 14.00 Uhr einen Task starten..? Java Basics - Anfänger-Themen 1
_user_q Timer - ScheduledExecutorService wird schon vorher beendet Java Basics - Anfänger-Themen 5
E multiple Timer die sich nicht summieren Java Basics - Anfänger-Themen 12
Jan_x8 Timer/Scanner Java Basics - Anfänger-Themen 5
C Timer aktualisieren Java Basics - Anfänger-Themen 5
L GUI- wie cancel ich einen Timer? Java Basics - Anfänger-Themen 10
missy72 Timer oder Timeline Java Basics - Anfänger-Themen 3
R Timer Format: 00:00:00 Java Basics - Anfänger-Themen 29
C java.util Timer läuft zu langsam? Java Basics - Anfänger-Themen 1
D Änder der Timer Speeds Java Basics - Anfänger-Themen 1
E Timer trotz erwartender Eingabe durchlaufen lassen Java Basics - Anfänger-Themen 11
L Methoden Timer Java Basics - Anfänger-Themen 9
J Memory-Spiel Aktivierung der Methode mit Timer Java Basics - Anfänger-Themen 44
G Animation Timer Nano Time Java Basics - Anfänger-Themen 2
S Timer reseten Java Basics - Anfänger-Themen 3
T Timer stoppt zu früh Java Basics - Anfänger-Themen 7
CptK Methoden Timer & Mathematischer Denkfehler Java Basics - Anfänger-Themen 7
mobaer Swing Timer stoppen Java Basics - Anfänger-Themen 3
C Wie erstellt man einen Timer/Delay? Java Basics - Anfänger-Themen 1
J Timer bauen, Main Methode immer wieder neu starten Java Basics - Anfänger-Themen 13
D Timer programmieren Java Basics - Anfänger-Themen 13
N Timer funktioniert nicht beim starten Java Basics - Anfänger-Themen 3
B Timer mehrere Male ausführen Java Basics - Anfänger-Themen 4
J Timer richtig pausieren Java Basics - Anfänger-Themen 2
E Timer erstellen Java Basics - Anfänger-Themen 2
B javax.ejb.Timer wieder starten? Java Basics - Anfänger-Themen 0
S actionlistener timer Java Basics - Anfänger-Themen 9
C Wie kann ich jetzt von der Game.java auf die Timer.java zugreifen? Java Basics - Anfänger-Themen 6
S timer mit imagedatei Java Basics - Anfänger-Themen 5
S timer Java Basics - Anfänger-Themen 0
V Java Uitil Timer Stoppt nicht Java Basics - Anfänger-Themen 2
KaffeeFan Timer beenden Java Basics - Anfänger-Themen 12
F Array und Timer Java Basics - Anfänger-Themen 2
G Timer einsetzen Java Basics - Anfänger-Themen 2
J Timer oder Thread programmieren ? Java Basics - Anfänger-Themen 10
F Timer beendet nicht immer Java Basics - Anfänger-Themen 2
F Timer abbrechen und wieder starten Java Basics - Anfänger-Themen 5
U Java Swing Timer mit ButtonKlick starten u. nach 12 Sekunden Befehl ausführen Java Basics - Anfänger-Themen 7
W Erste Schritte Timer soll jede Sekunde Label aktualisieren Java Basics - Anfänger-Themen 5
T Timer - HILFE Java Basics - Anfänger-Themen 10
O Alternative zum swing-Timer Java Basics - Anfänger-Themen 5
A Wieso funktioniert dieser Timer nicht?? Java Basics - Anfänger-Themen 3
S timer funktion mit javax panel Java Basics - Anfänger-Themen 3
O Laufender Timer+Action Listener in Thread VS isAlive() Java Basics - Anfänger-Themen 4
O Starte Timer, während anderer Timer noch läuft. Ruft dies Schwierigkeiten hervor? Java Basics - Anfänger-Themen 0
M Schneller Timer Java Basics - Anfänger-Themen 2
C Timer aus anderer Klasse stoppen/starten Java Basics - Anfänger-Themen 3
B Timer beenden? Java Basics - Anfänger-Themen 0
G Erste Schritte Timer: In einem festgelegten Intervall eine Methode ausführen Java Basics - Anfänger-Themen 6
O Delayed Timer erstellen Java Basics - Anfänger-Themen 3
M Timer / Thread Java Basics - Anfänger-Themen 43
M Javax.swing - Timer(2 Button) Java Basics - Anfänger-Themen 17
J Timer - Swing Java Basics - Anfänger-Themen 5
A Timer: textarea.getText() mit Variable vergleichen Java Basics - Anfänger-Themen 3
D Problem mit Methode und Timer Java Basics - Anfänger-Themen 35
T Wie mache ich einen Timer der alle 2 sekunden aufgerufen wird? Java Basics - Anfänger-Themen 5
R Einfacher Timer geht nicht Java Basics - Anfänger-Themen 7
J Swing Timer Java Basics - Anfänger-Themen 3
M Einfacher Timer ;) Java Basics - Anfänger-Themen 15
M Timer für Termial-Eingaben Java Basics - Anfänger-Themen 3
C Methoden Einen Timer einbauen, aber wie? Java Basics - Anfänger-Themen 5
B Timer Java Basics - Anfänger-Themen 25
M Timer-Thread in Swing öffnet jedes Mal ein neues Fenster Java Basics - Anfänger-Themen 6
S Timer / Schleifen Verständnis Problem Java Basics - Anfänger-Themen 3
S Erste Schritte Java Timer Java Basics - Anfänger-Themen 13
E Threads Timer Java Basics - Anfänger-Themen 6
Spin KI Anfänger Frage : Timer Problem Java Basics - Anfänger-Themen 6
F Prüfen ob timer läuft Java Basics - Anfänger-Themen 6
L Erste Schritte Timer und Zugriffsattribute Java Basics - Anfänger-Themen 5
M Audio + Timer Java Basics - Anfänger-Themen 12
M Methoden Timer in ActionListener aufrufen Java Basics - Anfänger-Themen 2
R Klassen MemorySpiel: brauche Timer Java Basics - Anfänger-Themen 3
D Timer in Applet Java Basics - Anfänger-Themen 2
ruerob Warum ist Timer schneller als While? Java Basics - Anfänger-Themen 9
F Java Timer Frage Java Basics - Anfänger-Themen 14
VfL_Freak Verständnisfrage zur Klasse "TIMER" Java Basics - Anfänger-Themen 7
B Timer Java Basics - Anfänger-Themen 2
S timer task problem Java Basics - Anfänger-Themen 2
C Überprüfen, ob Timer läuft Java Basics - Anfänger-Themen 3
S "Kleines" Problem mit dem Timer Java Basics - Anfänger-Themen 4
Luk10 Problem mit vielen Timer(-Events) Java Basics - Anfänger-Themen 17
Luk10 Swing timer und Threads Java Basics - Anfänger-Themen 4
W Timer erstellen Java Basics - Anfänger-Themen 2
M Timer: period während Verlauf wechseln Java Basics - Anfänger-Themen 12
M Timer unterbrechen? Wo ist mein Thread? Java Basics - Anfänger-Themen 2
L Timer innerhalb eines Threads Java Basics - Anfänger-Themen 3
P Java Timer Java Basics - Anfänger-Themen 2
C countdown/timer/Zeit warten lassen Java Basics - Anfänger-Themen 14
B problem mit timer/timertask, Farbverlauf Java Basics - Anfänger-Themen 10
Piwi Timer bei Programmende beenden Java Basics - Anfänger-Themen 25
T zweiter Timer überschreibt den ersten Timer ? Java Basics - Anfänger-Themen 5
kulturfenster Problem mit javax.swing.Timer Java Basics - Anfänger-Themen 2
C Regelmäßigen Timer bei Zeitüberschreitung nacheinander abarbeiten Java Basics - Anfänger-Themen 2
J timer Java Basics - Anfänger-Themen 2
J timer Java Basics - Anfänger-Themen 2
H Timer Java Basics - Anfänger-Themen 3
dl85hej Zeitsitschleife anstatt Timer Java Basics - Anfänger-Themen 5
G Klasse mit Timer nicht beenden Java Basics - Anfänger-Themen 6
S Timer / TimerTask Frage Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben