TimePanel.java 4.6 KB

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