TimePanel.java 5.3 KB

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