import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class TrafficLight extends JFrame{
Signal green = new Signal(Color.green);
Signal yellow = new Signal(Color.yellow);
Signal red = new Signal(Color.red);
Waktu waktu = new Waktu();
Time time = new Time();
int tick = 1;
int duration;
int state = 0;
public TrafficLight(){
green.turnOn(false);
yellow.turnOn(false);
red.turnOn(true);
JPanel trafficPanel = new JPanel(new GridLayout(4,1));
trafficPanel.add(red);
trafficPanel.add(yellow);
trafficPanel.add(green);
trafficPanel.add(waktu);
getContentPane().add(trafficPanel);
pack();
duration = time.Red();
Timer timer = new Timer(1000, new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
int timeRemaining = duration - tick;
if (timeRemaining <= 0) {
tick = 0;
state++;
changeSignalState(state);
changeTime(state);
}
waktu.setValue(duration - tick);
tick++;
}
});
timer.setRepeats(true);
timer.setCoalesce(true);
timer.start();
}
private boolean changeToBool(int state){
if (state % 3 > 0 ){
return false;
} else {
return true;
}
}
private void changeTime(int state){
if(state %3 == 0)
{
duration = time.Red();
}
if(state %3 == 1)
{
duration = time.Green();
}
if(state %3 == 2)
{
duration = time.Yellow();
}
}
public static void main(String[] args){
TrafficLight trafficLight = new TrafficLight();
trafficLight.setVisible(true);
}
private void changeSignalState(int state){
green.turnOn(changeToBool(state + 2));
yellow.turnOn(changeToBool(state + 1));
red.turnOn(changeToBool(state));
}
}