package ui.view; import java.awt.BorderLayout; import java.awt.Color; import java.awt.FlowLayout; import java.awt.Image; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.JSlider; import javax.swing.Timer; import javax.swing.border.LineBorder; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import ui.controller.Control; import ui.model.Model; public class TimePanel extends JPanel { private Model model; private Control controller; JSlider timeSlider = new JSlider(); private final JPanel timeBtnPanel = new JPanel(); private final JButton playBtn = new JButton(); private final JButton timeResetBtn = new JButton(); private final JButton timeForwardBtn = new JButton(); private final JButton timeBackwardBtn = new JButton(); private Timer timer; private boolean running = false; /** * */ private static final long serialVersionUID = 1L; public TimePanel(Model mod, Control cont) { super(); this.model = mod; this.controller = cont; // One Iteration timer = new Timer(1000, new ActionListener() { @Override public void actionPerformed(ActionEvent ae) { timeSlider.setValue(timeSlider.getValue() + 1); controller.setCurIteration(timeSlider.getValue()); if (timeSlider.getValue() == model.getIterations()-1) { running = false; playBtn.setIcon(new ImageIcon(new ImageIcon(this.getClass().getResource("/Button_Images/play.png")) .getImage().getScaledInstance(30, 30, Image.SCALE_SMOOTH))); timer.stop(); } } }); // Time Slider. Panels and Buttons this.setLayout(new BorderLayout(0, 0)); this.setBorder(null); // Slider timeSlider.setPaintTicks(true); timeSlider.setPaintLabels(true); timeSlider.setMinorTickSpacing(1); timeSlider.setMajorTickSpacing(5); timeSlider.setToolTipText("Time Slider"); timeSlider.setMaximum(model.getIterations()-1); timeSlider.setValue(0); timeSlider.setBackground(Color.WHITE); timeSlider.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { controller.setCurIteration(timeSlider.getValue()); } }); // Panel timeBtnPanel.setBorder(null); timeBtnPanel.setBackground(Color.WHITE); // Buttons timeBtnPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 0, 0)); playBtn.setToolTipText("Play"); playBtn.setBackground(Color.WHITE); playBtn.setBorderPainted(false); playBtn.setBorder(new LineBorder(Color.WHITE, 4)); playBtn.setIcon(new ImageIcon(new ImageIcon(this.getClass().getResource("/Button_Images/play.png")).getImage() .getScaledInstance(30, 30, Image.SCALE_SMOOTH))); playBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { running = !running; if (running) { timer.start(); playBtn.setIcon(new ImageIcon(new ImageIcon(this.getClass().getResource("/Button_Images/pause.png")) .getImage().getScaledInstance(30, 30, Image.SCALE_SMOOTH))); } else { timer.stop(); playBtn.setIcon(new ImageIcon(new ImageIcon(this.getClass().getResource("/Button_Images/play.png")) .getImage().getScaledInstance(30, 30, Image.SCALE_SMOOTH))); } } }); timeResetBtn.setToolTipText("Reset"); timeResetBtn.setBorderPainted(false); timeResetBtn.setBackground(Color.WHITE); timeResetBtn.setBorder(new LineBorder(Color.WHITE, 4)); timeResetBtn.setIcon(new ImageIcon(new ImageIcon(this.getClass().getResource("/Button_Images/reset.png")) .getImage().getScaledInstance(30, 30, Image.SCALE_SMOOTH))); timeResetBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { timeSlider.setValue(timeSlider.getMinimum()); controller.setCurIteration(timeSlider.getValue()); } }); timeForwardBtn.setToolTipText("Forward"); timeForwardBtn.setBorderPainted(false); timeForwardBtn.setContentAreaFilled(false); timeForwardBtn.setBorder(new LineBorder(Color.WHITE, 4)); timeForwardBtn.setIcon(new ImageIcon(new ImageIcon(this.getClass().getResource("/Button_Images/forward.png")) .getImage().getScaledInstance(30, 30, Image.SCALE_SMOOTH))); timeForwardBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { timeSlider.setValue(timeSlider.getValue() + 1); controller.setCurIteration(timeSlider.getValue()); } }); timeBackwardBtn.setToolTipText("Backward"); timeBackwardBtn.setBackground(Color.WHITE); timeBackwardBtn.setBorderPainted(false); timeBackwardBtn.setBorder(new LineBorder(Color.WHITE, 4)); timeBackwardBtn.setIcon(new ImageIcon(new ImageIcon(this.getClass().getResource("/Button_Images/backward.png")) .getImage().getScaledInstance(30, 30, Image.SCALE_SMOOTH))); timeBackwardBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { timeSlider.setValue(timeSlider.getValue() - 1); controller.setCurIteration(timeSlider.getValue()); } }); timeBtnPanel.add(playBtn); timeBtnPanel.add(timeResetBtn); timeBtnPanel.add(timeBackwardBtn); timeBtnPanel.add(timeForwardBtn); this.add(timeBtnPanel, BorderLayout.WEST); this.add(timeSlider); } }