Four
Four
testing;
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
panel.add(innerPanel);
}
gbc.gridy++;
timerField = new JTextField(6);
timerField.setEditable(false);
timerField.setHorizontalAlignment(JTextField.CENTER);
timerField.setFont(innerPanel.getFont().deriveFont(48f));
innerPanel.add(timerField, gbc);
}
gbc.gridwidth = 1;
gbc.gridy++;
JLabel redLabel = new JLabel("Red");
redLabel.setFont(normalFont);
innerPanel.add(redLabel, gbc);
gbc.gridx++;
redField = new JTextField(10);
redField.setFont(normalFont);
redField.setText(Integer.toString(model.getLightDelay(0)));
innerPanel.add(redField, gbc);
gbc.gridx = 0;
gbc.gridy++;
JLabel yellowLabel = new JLabel("Yellow");
yellowLabel.setFont(normalFont);
innerPanel.add(yellowLabel, gbc);
gbc.gridx++;
yellowField = new JTextField(10);
yellowField.setFont(normalFont);
yellowField.setText(Integer.toString(model.getLightDelay(1)));
innerPanel.add(yellowField, gbc);
gbc.gridx = 0;
gbc.gridy++;
JLabel greenLabel = new JLabel("Green");
greenLabel.setFont(normalFont);
innerPanel.add(greenLabel, gbc);
gbc.gridx++;
greenField = new JTextField(10);
greenField.setFont(normalFont);
greenField.setText(Integer.toString(model.getLightDelay(2)));
innerPanel.add(greenField, gbc);
gbc.gridwidth = 2;
gbc.gridx = 0;
gbc.gridy++;
JButton changeButton = new JButton("Change Time Values");
changeButton.setFont(normalFont);
changeButton.addActionListener(new ChangeTimeListener());
innerPanel.add(changeButton, gbc);
}
@Override
public void actionPerformed(ActionEvent event) {
int redValue = convertText(redField.getText());
int yellowValue = convertText(yellowField.getText());
int greenValue = convertText(greenField.getText());
model.setLightDelay(0, redValue);
model.setLightDelay(1, yellowValue);
model.setLightDelay(2, greenValue);
redField.setText(Integer.toString(redValue));
yellowField.setText(Integer.toString(yellowValue));
greenField.setText(Integer.toString(greenValue));
}
@Override
public void actionPerformed(ActionEvent event) {
JButton button = (JButton) event.getSource();
String text = button.getText();
if (text.equals("Stop Simulation")) {
model.setAllLights(true);
frame.pauseAnimation(true);
frame.clearTimerField();
frame.repaint();
frame.setStartButtonText("Start Simulation");
} else {
if (firstTimeSwitch) {
frame.startAnimation();
firstTimeSwitch = false;
}
model.setAllLights(false);
frame.resetAnimation();
frame.pauseAnimation(false);
frame.repaint();
frame.setStartButtonText("Stop Simulation");
}
}
this.setBackground(Color.WHITE);
this.setBorder(BorderFactory.createLineBorder(Color.BLUE, 5));
this.setPreferredSize(new Dimension(width + margin + margin,
height + margin + margin));
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
int x = getWidth() / 2;
int yStart = width / 2 + margin;
int index = 0;
int diameter = radius + radius;
resetAnimation();
this.running = true;
this.paused = false;
}
@Override
public void run() {
long refresh = 1000L;
while (running) {
if (paused) {
sleep(refresh);
} else {
countdownSeconds(refresh);
changeLight(refresh);
}
}
}
public TrafficLightModel() {
this.lights = new TrafficLight[3];
lights[0] = new TrafficLight(Color.RED, 30);
lights[1] = new TrafficLight(Color.YELLOW, 10);
lights[2] = new TrafficLight(Color.GREEN, 20);
}