/** @version 1.00 2019-04-04 @author Agustín J. González */ import java.awt.*; import java.awt.geom.*; //import java.util.*; import java.awt.event.*; import javax.swing.*; public class MyOwnGraphicsObject { public static void main(String[] args) { Semaforo3 sem = new Semaforo3(6,3); MyOwnPanel panel = new MyOwnPanel(sem); Controlador controlador = new Controlador(sem, panel); SwingUtilities.invokeLater(new Runnable() { // implementación Swing recomendada public void run() { MyOwnFrame frame = new MyOwnFrame(panel); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } // run ends }); controlador.manageTraffic(); } } class Controlador { public Controlador(Semaforo3 s, JPanel p) { sem = s; panel = p; } public void manageTraffic(){ while (true) { try { sem.turnStop(); panel.repaint(); Thread.sleep(4000); sem.turnTransition(); panel.repaint(); Thread.sleep(sem.getTransitionTime()*1000); } catch (InterruptedException e){ System.out.println(e); } } } private Semaforo3 sem; private JPanel panel; } /** A frame with a panel for a simple graphics object */ class MyOwnFrame extends JFrame { public MyOwnFrame(JPanel panel) { setTitle("MyOwnGraphcisObject"); setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); // add panel to frame Container contentPane = getContentPane(); contentPane.add(panel); } public static final int DEFAULT_WIDTH = 200; public static final int DEFAULT_HEIGHT = 300; } /** A panel for a simple graphics object. */ class MyOwnPanel extends JPanel { public MyOwnPanel(Semaforo3 s) { sem = s; setFocusable(true); } public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D)g; sem.paint_view(g2); } private Semaforo3 sem; }