TimePanel.java 5.9 KB

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