Hallo,
ich arbeite grade aus Spass an einem Ampelprogramm.
Das ganze soll halt wie eine echte Ampel funktionieren (bin mit dem Code noch nicht ganz fertig^^)
Hauptcode ab 120!
Allerdings habe ich hier ein Problem. Und zwar Läuft das Programm die Schleife immer erst ganz durch, wodurch sich die Anzeige der Ampel nicht verändert. Wie kann ich also nach jedem Thread.sleep bzw. davor die Labels aktualisieren?
Ich hoffe, dass klar ist was ich meine,
MFG Milkaselnuss
ich arbeite grade aus Spass an einem Ampelprogramm.
Das ganze soll halt wie eine echte Ampel funktionieren (bin mit dem Code noch nicht ganz fertig^^)
Java:
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Ampel extends JFrame implements ActionListener {
JLabel label01;
JLabel label02;
JLabel label03;
JLabel label04;
JLabel label05;
JLabel label1;
JLabel label2;
JLabel label3;
JLabel label4;
JLabel label5;
JLabel label6;
JLabel label7;
JLabel label8;
JLabel label9;
JLabel label10;
JLabel label11;
JLabel label12;
JLabel label13;
JButton button;
JLabel label14;
JLabel label15;
JLabel label16;
JLabel label17;
JLabel label18;
JLabel label19;
boolean started = false;
Icon icon_grey = new ImageIcon("../program_files/icon_grey.gif");
Icon icon_red = new ImageIcon("../program_files/icon_red.gif");
Icon icon_yellow = new ImageIcon("../program_files/icon_yellow.gif");
Icon icon_green = new ImageIcon("../program_files/icon_green.gif");
public Ampel() {
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(5, 3));
label01 = new JLabel("");
label02 = new JLabel("");
label03 = new JLabel("");
label04 = new JLabel("");
label05 = new JLabel("");
label1 = new JLabel("Fußgängerampel:");
label2 = new JLabel("");
label3 = new JLabel("Autoampel:");
label4 = new JLabel("");
label4.setOpaque(true);
label4.setBackground(Color.black);
label4.setIcon(icon_grey);
label5 = new JLabel("");
label6 = new JLabel("");
label6.setOpaque(true);
label6.setBackground(Color.black);
label6.setIcon(icon_grey);
label7 = new JLabel("");
label7.setOpaque(true);
label7.setBackground(Color.black);
label7.setIcon(icon_grey);
label8 = new JLabel("");
label9 = new JLabel("");
label9.setOpaque(true);
label9.setBackground(Color.black);
label9.setIcon(icon_grey);
label10 = new JLabel("");
label11 = new JLabel("");
label12 = new JLabel("");
label12.setOpaque(true);
label12.setBackground(Color.black);
label12.setIcon(icon_grey);
button = new JButton("Bitte Ampel starten");
button.addActionListener(this);
label13 = new JLabel("");
label14 = new JLabel("");
label15 = new JLabel("");
label16 = new JLabel("");
label17 = new JLabel("");
label18 = new JLabel("");
label19 = new JLabel("");
panel.add(label01);
panel.add(label1);
panel.add(label2);
panel.add(label3);
panel.add(label15);
panel.add(label02);
panel.add(label4);
panel.add(label5);
panel.add(label6);
panel.add(label16);
panel.add(label03);
panel.add(label7);
panel.add(label8);
panel.add(label9);
panel.add(label17);
panel.add(label04);
panel.add(label10);
panel.add(label11);
panel.add(label12);
panel.add(label18);
panel.add(label05);
panel.add(label13);
panel.add(button);
panel.add(label14);
panel.add(label19);
setContentPane(panel);
}
public void actionPerformed(ActionEvent Ereignis) {
Object Quelle = Ereignis.getSource();
if (Quelle == button && started == true) {
try {
System.out.println("Requesting...");
Thread.sleep(1000);
label12.setIcon(icon_grey);
label9.setIcon(icon_yellow);
Thread.sleep(1600);
label9.setIcon(icon_grey);
label6.setIcon(icon_red);
Thread.sleep(1000);
System.out.println("Changing to Green...");
label4.setIcon(icon_grey);
label7.setIcon(icon_green);
Thread.sleep(500);
System.out.println("Done...");
Thread.sleep(5000);
System.out.println("Changing to Red in 5 Seconds...");
Thread.sleep(5000);
System.out.println("Changing..");
label7.setIcon(icon_grey);
label4.setIcon(icon_red);
Thread.sleep(100);
System.out.println("Done..");
Thread.sleep(1400);
label9.setIcon(icon_yellow);
Thread.sleep(2000);
label6.setIcon(icon_grey);
label9.setIcon(icon_grey);
label12.setIcon(icon_green);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if (Quelle == button && started == false) {
try {
System.out.println("Starting...");
label4.setIcon(icon_red);
label12.setIcon(icon_green);
started = true;
button.setText("Anfrage");
Thread.sleep(1000);
System.out.println("Started");
System.out.println("");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
Ampel ampel = new Ampel();
ampel.setSize(510, 510);
ampel.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ampel.setVisible(true);
ampel.setLocationRelativeTo(null);
}
}
Allerdings habe ich hier ein Problem. Und zwar Läuft das Programm die Schleife immer erst ganz durch, wodurch sich die Anzeige der Ampel nicht verändert. Wie kann ich also nach jedem Thread.sleep bzw. davor die Labels aktualisieren?
Ich hoffe, dass klar ist was ich meine,
MFG Milkaselnuss