import java.awt.*;  
 import javax.swing.*;  
 import java.awt.event.*;  
 public class TrafficLightPane extends JPanel {  
   int tick = 1;  
   int duration = 15;  
   int state = 0;  
   SignalPane green = new SignalPane(Color.green);  
   SignalPane yellow = new SignalPane(Color.yellow);  
   SignalPane red = new SignalPane(Color.red);  
   DigitPane timerDigit = new DigitPane();  
   public TrafficLightPane(int s){  
     duration = s;  
     setLayout(new GridLayout(4,1));  
     green.turnOn(false);  
     yellow.turnOn(false);  
     red.turnOn(true);  
     timerDigit.setValue(duration);  
     add(red);  
     add(yellow);  
     add(green);  
     add(timerDigit);  
     Timer timer = new Timer(1000, new ActionListener(){  
       public void actionPerformed(ActionEvent e) {  
         int timeRemaining = duration - tick;  
         if (timeRemaining <= 0) {  
           tick = 0;  
           state++;  
           changeSignalState(state);  
         }  
         timerDigit.setValue(duration - tick);  
         tick++;  
       }  
     });  
     timer.setRepeats(true);  
     timer.setCoalesce(true);  
     timer.start();  
   }  
   //function u/ mengubah integer menjadi boolean  
   private boolean changeToBool(int state){  
     if (state % 3 > 0 ){  
       return false;  
     } else {  
       return true;  
     }  
   }  
   // function untuk mengubah state (on/off) dari object Signal  
   private void changeSignalState(int state){  
     green.turnOn(changeToBool(state + 2));  
     yellow.turnOn(changeToBool(state + 1));  
     red.turnOn(changeToBool(state));  
   }  
   public void setDuration(int s){  
     duration = s;  
   }  
 }