TimePanel.java 6.0 KB

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