Classe JSemaforo realizzata in classe:
import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import javax.swing.JComponent; public class JSemaforo extends JComponent { public final int ROSSO = 0, VERDE = 1, GIALLO = 2; private boolean acceso = false; private int stato = ROSSO; public JSemaforo() { this.setPreferredSize(new Dimension(50, 150)); } public void paintComponent(Graphics g) { super.paintComponent(g); g.setColor(Color.GRAY); g.fillRoundRect(0, 0, 50, 150, 10, 10); if (acceso) { switch (stato) { case ROSSO: g.setColor(Color.RED); g.fillOval(5, 5, 40, 40); break; case VERDE: g.setColor(Color.GREEN); g.fillOval(5, 105, 40, 40); break; case GIALLO: g.setColor(Color.YELLOW); g.fillOval(5, 55, 40, 40); break; } } else { g.setColor(Color.YELLOW); g.fillOval(5, 55, 40, 40); } } public void successivo() { stato++; if (stato > GIALLO) stato = ROSSO; repaint(); } public int getStato() { return stato; } public void setStato(int stato) { this.stato = stato; } public boolean isAcceso() { return acceso; } public void setAcceso(boolean acceso) { this.acceso = acceso; } }