import java.awt.*;public class Ampel extends Canvas { /** Zustand der Ampel */ public int zustand; public int height; public int width; public int mid; public int drittel; public int yoffset; public int xoffset; /** Ampelzustand rot */ public static final int ROT = 0; /** Ampelzustand gelb */ public static final int GELB = 1; /** Ampelzustand grün */ public static final int GRUEN = 2; /** Ampelzustand rot-gelb */ public static final int ROTGELB = 3; /** Ampelzustand Ampel aus */ public static final int AUS = 4; /** * Konstruktor bekommt Grösse der Ampel übergeben * @param h - Höhe der Ampel in Pixeln * @param w - Breite der Ampel in Pixeln */ public Ampel(int w, int h) { this.setBackground(Color.white); height = h; width= w; mid = (int)(width/2); drittel = (int)(height/3); yoffset = (int)(width/20); xoffset = 1; this.setSize(w,h); zustand = Ampel.ROT; } /** * Standard paint Methode */ public void paint(Graphics g) { int d = width-6; ringe(g); switch(zustand) { case Ampel.ROT: g.setColor(Color.red); g.fillOval(xoffset,yoffset,d,d); break; case Ampel.GELB: g.setColor(Color.yellow); g.fillOval(xoffset,drittel+yoffset,d,d); break; case Ampel.GRUEN: g.setColor(Color.green); g.fillOval(xoffset,2*drittel+yoffset,d,d); break; case Ampel.ROTGELB: g.setColor(Color.red); g.fillOval(xoffset,yoffset,d,d); g.setColor(Color.yellow); g.fillOval(xoffset,drittel+yoffset,d,d); break; default: break; } } /** * schwarze Ringe der Ampel zeichnen */ public void ringe(Graphics g) { int d = width-5; g.setColor(Color.black); // Kreis für Rot g.drawOval(xoffset,yoffset,d,d); g.drawOval(xoffset,(int)(drittel)+yoffset,d,d); g.drawOval(xoffset,(int)(2*drittel)+yoffset,d,d); } /** * Ampel auf rot */ public void rot() { zustand = Ampel.ROT; repaint(); } /** * Ampel auf gelb */ public void gelb() { zustand = Ampel.GELB; repaint(); } /** * Ampel auf gruen */ public void gruen() { zustand = Ampel.GRUEN; repaint(); } /** * Ampel auf rot-gelb */ public void rotgelb() { zustand = Ampel.ROTGELB; repaint(); } /** * Ampel aus */ public void aus() { zustand = Ampel.AUS; repaint(); }}
import java.awt.event.*; import java.awt.*;import javax.swing.*; public class Ampelfenster extends JPanel{ public Ampelfenster(){ ThreadAmpel t1 = new ThreadAmpel(); setLayout(null); setBackground(Color.white); t1.start(); } class ThreadAmpel extends Thread{ public void run(){ JTextField ausgabe = new JTextField(30); ausgabe.setBounds(10, 130, 60, 40); add(ausgabe); Ampel a1 = new Ampel(20, 50); Ampel a2 = new Ampel(20, 50); //(linker Seitenabstand, oberer Abstand, Breite, Höhe) a1.setBounds(10, 10, 40, 100); add(a1); a2.setBounds(60, 10, 40, 100); add(a2); a2.gruen(); try{ while(true){ for(int i=0; i>=3; i++){ switch(i){ //case 0: a1.rot(); //a2.gruen(); case 0: ausgabe.setText("hallo"); break; case 1: a1.rotgelb(); a2.gelb(); repaint(); break; case 2: a1.gelb(); a2.rotgelb(); repaint(); break; case 3: a1.gruen(); a2.rot(); repaint(); break; default: ausgabe.setText("default"); } Thread.sleep(100); } } } catch(Exception e){ } } } public static void main(String [] args){ JFrame f1 = new JFrame("Ampel"); f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f1.getContentPane().add(new Ampelfenster()); f1.pack(); f1.setSize(300, 400); f1.setVisible(true); } }