123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242 |
- package ui.view;
- import java.awt.BorderLayout;
- import java.awt.Color;
- import java.awt.FlowLayout;
- import java.awt.Image;
- import java.awt.Point;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.awt.event.MouseAdapter;
- import java.awt.event.MouseEvent;
- import java.awt.event.MouseListener;
- import javax.swing.ImageIcon;
- import javax.swing.JButton;
- import javax.swing.JLabel;
- import javax.swing.JPanel;
- import javax.swing.JSlider;
- import javax.swing.JTextField;
- import javax.swing.Timer;
- import javax.swing.border.LineBorder;
- import javax.swing.event.CaretEvent;
- import javax.swing.event.CaretListener;
- import javax.swing.event.ChangeEvent;
- import javax.swing.event.ChangeListener;
- import javax.swing.plaf.basic.BasicSliderUI;
- import javax.swing.plaf.synth.SynthSliderUI;
- import ui.controller.Control;
- import ui.model.Model;
- /**
- * This Class represents a Panel where the User can start and stop the
- * Simulation. He Can also reset the Simulation and click through every
- * Iteration.
- *
- * @author Gruppe14
- */
- public class TimePanel extends JPanel {
- private Model model;
- private Control controller;
- JLabel simSpeedLabel = new JLabel(Languages.getLanguage()[84]);
- private JTextField simSpeedText = new JTextField("1000");
- JSlider timeSlider = new JSlider(){
- {
- // Make the slider jump to mouse position on left click
- MouseListener[] listeners = getMouseListeners();
- for (MouseListener l : listeners)
- removeMouseListener(l); // remove UI-installed TrackListener
- final BasicSliderUI ui = (BasicSliderUI) getUI();
- BasicSliderUI.TrackListener tl = ui.new TrackListener() {
- // this is where we jump to absolute value of click
- @Override public void mouseClicked(MouseEvent e) {
- Point p = e.getPoint();
- int value = ui.valueForXPosition(p.x);
- setValue(value);
- }
- // disable check that will invoke scrollDueToClickInTrack
- @Override public boolean shouldScroll(int dir) {
- return false;
- }
- };
- addMouseListener(tl);
- }
- };;
- private final JPanel timeBtnPanel = new JPanel();
- final JButton playBtn = new JButton();
- final JButton timeResetBtn = new JButton();
- final JButton timeForwardBtn = new JButton();
- final JButton timeBackwardBtn = new JButton();
- private Timer timer;
- private boolean running = false;
- private static final long serialVersionUID = 1L;
- /**
- * Constructor.
- *
- * @param mod
- * the Model
- * @param cont
- * the Controller
- */
- public TimePanel(Model mod, Control cont) {
- super();
- this.model = mod;
- this.controller = cont;
- // One Iteration
- timer = new Timer(0, new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent ae) {
- timeSlider.setValue(timeSlider.getValue() + 1);
- controller.setCurIteration(timeSlider.getValue());
- timer.setDelay(model.getTimerSpeed());
- 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(Languages.getLanguage()[93]);
- timeSlider.setMaximum(model.getIterations() - 1);
- timeSlider.setValue(0);
- timeSlider.addChangeListener(new ChangeListener() {
- @Override
- public void stateChanged(ChangeEvent e) {
- controller.setCurIteration(timeSlider.getValue());
- }
- });
- timeSlider.addMouseListener(new MouseAdapter() {
- @Override
- public void mousePressed(MouseEvent e) {
- controller.resetSimulation();
- }
- });
-
- timeSlider.addMouseMotionListener(new MouseAdapter() {
- @Override
- public void mouseDragged(MouseEvent e) {
- controller.resetSimulation();
- }
- });
- // Panel
- timeBtnPanel.setBorder(null);
- timeBtnPanel.setLayout(new FlowLayout(FlowLayout.CENTER));
- // Buttons
- playBtn.setToolTipText(Languages.getLanguage()[89]);
- playBtn.setContentAreaFilled(false);
- playBtn.setBorderPainted(false);
- playBtn.setBorder(null);
- 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();
- timer.setDelay(model.getTimerSpeed());
- 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(Languages.getLanguage()[90]);
- timeResetBtn.setContentAreaFilled(false);
- timeResetBtn.setBorder(null);
- 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());
- // controller.calculateStateForCurrentTimeStep();
- controller.resetSimulation();
- }
- });
- timeForwardBtn.setToolTipText(Languages.getLanguage()[91]);
- timeForwardBtn.setContentAreaFilled(false);
- timeForwardBtn.setBorder(null);
- 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(Languages.getLanguage()[92]);
- timeBackwardBtn.setBorder(null);
- 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());
- }
- });
- // timerSpeed
- simSpeedText.addCaretListener(new CaretListener() {
- @Override
- public void caretUpdate(CaretEvent e) {
- try {
- controller.setTimerSpeed(Integer.parseInt(simSpeedText.getText()));
- } catch (Exception ex) {
- // TODO: handle exception
- }
- }
- });
- timeBtnPanel.add(simSpeedLabel);
- timeBtnPanel.add(simSpeedText);
- timeBtnPanel.add(playBtn);
- timeBtnPanel.add(timeResetBtn);
- /*
- * the backwards button isnt used anymore
- */
- // timeBtnPanel.add(timeBackwardBtn);
- timeBtnPanel.add(timeForwardBtn);
- this.add(timeBtnPanel, BorderLayout.WEST);
- this.add(timeSlider);
- }
- /**
- * Retunrs the TimeSlider.
- *
- * @return the TimeSlider
- */
- public JSlider getTimeSlider() {
- return timeSlider;
- }
- }
|