TimePanel.java 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. package ui.view;
  2. import java.awt.BorderLayout;
  3. import java.awt.Color;
  4. import java.awt.Image;
  5. import java.awt.event.ActionEvent;
  6. import java.awt.event.ActionListener;
  7. import javax.swing.ImageIcon;
  8. import javax.swing.JButton;
  9. import javax.swing.JPanel;
  10. import javax.swing.JSlider;
  11. import javax.swing.Timer;
  12. import javax.swing.border.LineBorder;
  13. import javax.swing.event.ChangeEvent;
  14. import javax.swing.event.ChangeListener;
  15. import ui.controller.Control;
  16. import ui.model.Model;
  17. import javax.swing.BoxLayout;
  18. /**
  19. * This Class represents a Panel where the User can start and stop the Simulation.
  20. * He Can also reset the Simulation and click through every Iteration.
  21. *
  22. * @author Gruppe14
  23. */
  24. public class TimePanel extends JPanel {
  25. private Model model;
  26. private Control controller;
  27. JSlider timeSlider = new JSlider();
  28. private final JPanel timeBtnPanel = new JPanel();
  29. private final JButton playBtn = new JButton();
  30. private final JButton timeResetBtn = new JButton();
  31. private final JButton timeForwardBtn = new JButton();
  32. private final JButton timeBackwardBtn = new JButton();
  33. private Timer timer;
  34. private boolean running = false;
  35. private static final long serialVersionUID = 1L;
  36. /**
  37. * Constructor.
  38. * @param mod the Model
  39. * @param cont the Controller
  40. */
  41. public TimePanel(Model mod, Control cont) {
  42. super();
  43. this.model = mod;
  44. this.controller = cont;
  45. // One Iteration
  46. timer = new Timer(model.getTimerSpeed(), new ActionListener() {
  47. @Override
  48. public void actionPerformed(ActionEvent ae) {
  49. timeSlider.setValue(timeSlider.getValue() + 1);
  50. controller.setCurIteration(timeSlider.getValue());
  51. timer.setDelay(model.getTimerSpeed());
  52. if (timeSlider.getValue() == model.getIterations() - 1) {
  53. running = false;
  54. playBtn.setIcon(new ImageIcon(new ImageIcon(this.getClass().getResource("/Button_Images/play.png"))
  55. .getImage().getScaledInstance(30, 30, Image.SCALE_SMOOTH)));
  56. timer.stop();
  57. }
  58. }
  59. });
  60. // Time Slider. Panels and Buttons
  61. this.setLayout(new BorderLayout(0, 0));
  62. this.setBorder(null);
  63. // Slider
  64. timeSlider.setPaintTicks(true);
  65. timeSlider.setPaintLabels(true);
  66. timeSlider.setMinorTickSpacing(1);
  67. timeSlider.setMajorTickSpacing(5);
  68. timeSlider.setToolTipText("Time Slider");
  69. timeSlider.setMaximum(model.getIterations() - 1);
  70. timeSlider.setValue(0);
  71. timeSlider.setBackground(Color.WHITE);
  72. timeSlider.addChangeListener(new ChangeListener() {
  73. @Override
  74. public void stateChanged(ChangeEvent e) {
  75. controller.setCurIteration(timeSlider.getValue());
  76. }
  77. });
  78. // Panel
  79. timeBtnPanel.setBorder(null);
  80. timeBtnPanel.setBackground(Color.WHITE);
  81. timeBtnPanel.setLayout(new BoxLayout(timeBtnPanel, BoxLayout.X_AXIS));
  82. // Buttons
  83. playBtn.setToolTipText("Play");
  84. playBtn.setBackground(Color.WHITE);
  85. playBtn.setBorderPainted(false);
  86. playBtn.setBorder(new LineBorder(Color.WHITE, 4));
  87. playBtn.setIcon(new ImageIcon(new ImageIcon(this.getClass().getResource("/Button_Images/play.png")).getImage()
  88. .getScaledInstance(30, 30, Image.SCALE_SMOOTH)));
  89. playBtn.addActionListener(new ActionListener() {
  90. @Override
  91. public void actionPerformed(ActionEvent e) {
  92. running = !running;
  93. if (running) {
  94. timer.start();
  95. timer.setDelay(model.getTimerSpeed());
  96. playBtn.setIcon(new ImageIcon(new ImageIcon(this.getClass().getResource("/Button_Images/pause.png"))
  97. .getImage().getScaledInstance(30, 30, Image.SCALE_SMOOTH)));
  98. } else {
  99. timer.stop();
  100. playBtn.setIcon(new ImageIcon(new ImageIcon(this.getClass().getResource("/Button_Images/play.png"))
  101. .getImage().getScaledInstance(30, 30, Image.SCALE_SMOOTH)));
  102. }
  103. }
  104. });
  105. timeResetBtn.setToolTipText("Reset");
  106. timeResetBtn.setBorderPainted(false);
  107. timeResetBtn.setBackground(Color.WHITE);
  108. timeResetBtn.setBorder(new LineBorder(Color.WHITE, 4));
  109. timeResetBtn.setIcon(new ImageIcon(new ImageIcon(this.getClass().getResource("/Button_Images/reset.png"))
  110. .getImage().getScaledInstance(30, 30, Image.SCALE_SMOOTH)));
  111. timeResetBtn.addActionListener(new ActionListener() {
  112. public void actionPerformed(ActionEvent ae) {
  113. timeSlider.setValue(timeSlider.getMinimum());
  114. controller.setCurIteration(timeSlider.getValue());
  115. controller.calculateStateForCurrentTimeStep();
  116. }
  117. });
  118. timeForwardBtn.setToolTipText("Forward");
  119. timeForwardBtn.setBorderPainted(false);
  120. timeForwardBtn.setContentAreaFilled(false);
  121. timeForwardBtn.setBorder(new LineBorder(Color.WHITE, 4));
  122. timeForwardBtn.setIcon(new ImageIcon(new ImageIcon(this.getClass().getResource("/Button_Images/forward.png"))
  123. .getImage().getScaledInstance(30, 30, Image.SCALE_SMOOTH)));
  124. timeForwardBtn.addActionListener(new ActionListener() {
  125. public void actionPerformed(ActionEvent ae) {
  126. timeSlider.setValue(timeSlider.getValue() + 1);
  127. controller.setCurIteration(timeSlider.getValue());
  128. }
  129. });
  130. timeBackwardBtn.setToolTipText("Backward");
  131. timeBackwardBtn.setBackground(Color.WHITE);
  132. timeBackwardBtn.setBorderPainted(false);
  133. timeBackwardBtn.setBorder(new LineBorder(Color.WHITE, 4));
  134. timeBackwardBtn.setIcon(new ImageIcon(new ImageIcon(this.getClass().getResource("/Button_Images/backward.png"))
  135. .getImage().getScaledInstance(30, 30, Image.SCALE_SMOOTH)));
  136. timeBackwardBtn.addActionListener(new ActionListener() {
  137. public void actionPerformed(ActionEvent ae) {
  138. timeSlider.setValue(timeSlider.getValue() - 1);
  139. controller.setCurIteration(timeSlider.getValue());
  140. }
  141. });
  142. timeBtnPanel.add(playBtn);
  143. timeBtnPanel.add(timeResetBtn);
  144. timeBtnPanel.add(timeBackwardBtn);
  145. timeBtnPanel.add(timeForwardBtn);
  146. this.add(timeBtnPanel, BorderLayout.WEST);
  147. this.add(timeSlider);
  148. }
  149. /**
  150. * Retunrs the TimeSlider.
  151. *
  152. * @return the TimeSlider
  153. */
  154. public JSlider getTimeSlider(){
  155. return timeSlider;
  156. }
  157. }