TimePanel.java 5.5 KB

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