TimePanel.java 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. package ui.view;
  2. import java.awt.BorderLayout;
  3. import java.awt.Color;
  4. import java.awt.FlowLayout;
  5. import java.awt.Image;
  6. import java.awt.event.ActionEvent;
  7. import java.awt.event.ActionListener;
  8. import java.awt.event.MouseAdapter;
  9. import java.awt.event.MouseEvent;
  10. import javax.swing.ImageIcon;
  11. import javax.swing.JButton;
  12. import javax.swing.JLabel;
  13. import javax.swing.JPanel;
  14. import javax.swing.JSlider;
  15. import javax.swing.JTextField;
  16. import javax.swing.Timer;
  17. import javax.swing.border.LineBorder;
  18. import javax.swing.event.CaretEvent;
  19. import javax.swing.event.CaretListener;
  20. import javax.swing.event.ChangeEvent;
  21. import javax.swing.event.ChangeListener;
  22. import ui.controller.Control;
  23. import ui.model.Model;
  24. /**
  25. * This Class represents a Panel where the User can start and stop the
  26. * Simulation. He Can also reset the Simulation and click through every
  27. * Iteration.
  28. *
  29. * @author Gruppe14
  30. */
  31. public class TimePanel extends JPanel {
  32. private Model model;
  33. private Control controller;
  34. JLabel simSpeedLabel = new JLabel(Languages.getLanguage()[84]);
  35. private JTextField simSpeedText = new JTextField("1000");
  36. JSlider timeSlider = new JSlider();
  37. private final JPanel timeBtnPanel = new JPanel();
  38. final JButton playBtn = new JButton();
  39. final JButton timeResetBtn = new JButton();
  40. final JButton timeForwardBtn = new JButton();
  41. final JButton timeBackwardBtn = new JButton();
  42. private Timer timer;
  43. private boolean running = false;
  44. private static final long serialVersionUID = 1L;
  45. /**
  46. * Constructor.
  47. *
  48. * @param mod
  49. * the Model
  50. * @param cont
  51. * the Controller
  52. */
  53. public TimePanel(Model mod, Control cont) {
  54. super();
  55. this.model = mod;
  56. this.controller = cont;
  57. // One Iteration
  58. timer = new Timer(0, new ActionListener() {
  59. @Override
  60. public void actionPerformed(ActionEvent ae) {
  61. timeSlider.setValue(timeSlider.getValue() + 1);
  62. controller.setCurIteration(timeSlider.getValue());
  63. timer.setDelay(model.getTimerSpeed());
  64. if (timeSlider.getValue() == model.getIterations() - 1) {
  65. running = false;
  66. playBtn.setIcon(new ImageIcon(new ImageIcon(this.getClass().getResource("/Button_Images/play.png"))
  67. .getImage().getScaledInstance(30, 30, Image.SCALE_SMOOTH)));
  68. timer.stop();
  69. }
  70. }
  71. });
  72. // Time Slider. Panels and Buttons
  73. this.setLayout(new BorderLayout(0, 0));
  74. this.setBorder(null);
  75. // Slider
  76. timeSlider.setPaintTicks(true);
  77. timeSlider.setPaintLabels(true);
  78. timeSlider.setMinorTickSpacing(1);
  79. timeSlider.setMajorTickSpacing(5);
  80. timeSlider.setToolTipText(Languages.getLanguage()[93]);
  81. timeSlider.setMaximum(model.getIterations() - 1);
  82. timeSlider.setValue(0);
  83. timeSlider.setBackground(Color.WHITE);
  84. timeSlider.addChangeListener(new ChangeListener() {
  85. @Override
  86. public void stateChanged(ChangeEvent e) {
  87. controller.setCurIteration(timeSlider.getValue());
  88. }
  89. });
  90. timeSlider.addMouseListener(new MouseAdapter() {
  91. @Override
  92. public void mousePressed(MouseEvent e) {
  93. controller.resetSimulation();
  94. }
  95. });
  96. timeSlider.addMouseMotionListener(new MouseAdapter() {
  97. @Override
  98. public void mouseDragged(MouseEvent e) {
  99. controller.resetSimulation();
  100. }
  101. });
  102. // Panel
  103. timeBtnPanel.setBorder(null);
  104. timeBtnPanel.setBackground(Color.WHITE);
  105. timeBtnPanel.setLayout(new FlowLayout());
  106. // Buttons
  107. playBtn.setToolTipText(Languages.getLanguage()[89]);
  108. playBtn.setBackground(Color.WHITE);
  109. playBtn.setBorderPainted(false);
  110. playBtn.setBorder(new LineBorder(Color.WHITE, 4));
  111. playBtn.setIcon(new ImageIcon(new ImageIcon(this.getClass().getResource("/Button_Images/play.png")).getImage()
  112. .getScaledInstance(30, 30, Image.SCALE_SMOOTH)));
  113. playBtn.addActionListener(new ActionListener() {
  114. @Override
  115. public void actionPerformed(ActionEvent e) {
  116. running = !running;
  117. if (running) {
  118. timer.start();
  119. timer.setDelay(model.getTimerSpeed());
  120. playBtn.setIcon(new ImageIcon(new ImageIcon(this.getClass().getResource("/Button_Images/pause.png"))
  121. .getImage().getScaledInstance(30, 30, Image.SCALE_SMOOTH)));
  122. } else {
  123. timer.stop();
  124. playBtn.setIcon(new ImageIcon(new ImageIcon(this.getClass().getResource("/Button_Images/play.png"))
  125. .getImage().getScaledInstance(30, 30, Image.SCALE_SMOOTH)));
  126. }
  127. }
  128. });
  129. timeResetBtn.setToolTipText(Languages.getLanguage()[90]);
  130. timeResetBtn.setBorderPainted(false);
  131. timeResetBtn.setBackground(Color.WHITE);
  132. timeResetBtn.setBorder(new LineBorder(Color.WHITE, 4));
  133. timeResetBtn.setIcon(new ImageIcon(new ImageIcon(this.getClass().getResource("/Button_Images/reset.png"))
  134. .getImage().getScaledInstance(30, 30, Image.SCALE_SMOOTH)));
  135. timeResetBtn.addActionListener(new ActionListener() {
  136. public void actionPerformed(ActionEvent ae) {
  137. timeSlider.setValue(timeSlider.getMinimum());
  138. controller.setCurIteration(timeSlider.getValue());
  139. // controller.calculateStateForCurrentTimeStep();
  140. controller.resetSimulation();
  141. }
  142. });
  143. timeForwardBtn.setToolTipText(Languages.getLanguage()[91]);
  144. timeForwardBtn.setBorderPainted(false);
  145. timeForwardBtn.setContentAreaFilled(false);
  146. timeForwardBtn.setBorder(new LineBorder(Color.WHITE, 4));
  147. timeForwardBtn.setIcon(new ImageIcon(new ImageIcon(this.getClass().getResource("/Button_Images/forward.png"))
  148. .getImage().getScaledInstance(30, 30, Image.SCALE_SMOOTH)));
  149. timeForwardBtn.addActionListener(new ActionListener() {
  150. public void actionPerformed(ActionEvent ae) {
  151. timeSlider.setValue(timeSlider.getValue() + 1);
  152. controller.setCurIteration(timeSlider.getValue());
  153. }
  154. });
  155. timeBackwardBtn.setToolTipText(Languages.getLanguage()[92]);
  156. timeBackwardBtn.setBackground(Color.WHITE);
  157. timeBackwardBtn.setBorderPainted(false);
  158. timeBackwardBtn.setBorder(new LineBorder(Color.WHITE, 4));
  159. timeBackwardBtn.setIcon(new ImageIcon(new ImageIcon(this.getClass().getResource("/Button_Images/backward.png"))
  160. .getImage().getScaledInstance(30, 30, Image.SCALE_SMOOTH)));
  161. timeBackwardBtn.addActionListener(new ActionListener() {
  162. public void actionPerformed(ActionEvent ae) {
  163. timeSlider.setValue(timeSlider.getValue() - 1);
  164. controller.setCurIteration(timeSlider.getValue());
  165. }
  166. });
  167. // timerSpeed
  168. simSpeedText.addCaretListener(new CaretListener() {
  169. @Override
  170. public void caretUpdate(CaretEvent e) {
  171. try {
  172. controller.setTimerSpeed(Integer.parseInt(simSpeedText.getText()));
  173. } catch (Exception ex) {
  174. // TODO: handle exception
  175. }
  176. }
  177. });
  178. timeBtnPanel.add(simSpeedLabel);
  179. timeBtnPanel.add(simSpeedText);
  180. timeBtnPanel.add(playBtn);
  181. timeBtnPanel.add(timeResetBtn);
  182. /*
  183. * the backwards button isnt used anymore
  184. */
  185. // timeBtnPanel.add(timeBackwardBtn);
  186. timeBtnPanel.add(timeForwardBtn);
  187. this.add(timeBtnPanel, BorderLayout.WEST);
  188. this.add(timeSlider);
  189. }
  190. /**
  191. * Retunrs the TimeSlider.
  192. *
  193. * @return the TimeSlider
  194. */
  195. public JSlider getTimeSlider() {
  196. return timeSlider;
  197. }
  198. }