TimePanel.java 6.1 KB

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