import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JPanel; public class AnimationPlayer extends JPanel implements ActionListener { private static final long serialVersionUID = 1L; private Interface interf; private JButton backward; private JButton stop; private JButton play; private JButton pause; private JButton forward; private boolean go = false; private boolean stopClock = false; private static final int TICK_JUMP = 10; private Thread tickClock = new Thread(new Runnable() { @Override public void run() { while(!stopClock) { if(!go) { // pause try { Thread.sleep(100); } catch (InterruptedException ignored) {} continue; } long before = System.currentTimeMillis(); interf.computeTick(); interf.tick += TICK_JUMP; long after = System.currentTimeMillis(); if(after - before < TICK_JUMP) { try { Thread.sleep(TICK_JUMP - after + before);} catch (InterruptedException ignored) {} } else if(after - before > TICK_JUMP) { System.err.println("Animation were slowed down by " + String.valueOf(after - before - TICK_JUMP) + " ticks !"); } } } }); public void stopTickClock() {stopClock = true;} public AnimationPlayer(Interface interf) { this(interf, BoxLayout.LINE_AXIS); } public AnimationPlayer(Interface interf, int direction) { this.interf = interf; setLayout(new BoxLayout(this, direction)); add(Box.createHorizontalGlue()); // backward button backward = new JButton(new ImageIcon(getClass().getResource("/icons/backward.png"))); backward.addActionListener(this); add(backward); // stop button stop = new JButton(new ImageIcon(getClass().getResource("/icons/stop.png"))); stop.addActionListener(this); add(stop); // play button play = new JButton(new ImageIcon(getClass().getResource("/icons/play.png"))); play.addActionListener(this); add(play); // pause button pause = new JButton(new ImageIcon(getClass().getResource("/icons/pause.png"))); pause.addActionListener(this); add(pause); // forward button forward = new JButton(new ImageIcon(getClass().getResource("/icons/forward.png"))); forward.addActionListener(this); add(forward); add(Box.createHorizontalGlue()); tickClock.start(); } @Override public void actionPerformed(ActionEvent e) { if(e.getSource() == backward) { interf.tick -= 100; if(interf.tick < 0) interf.tick = 0; interf.computeTick(); }else if(e.getSource() == stop) { go = false; interf.tick = 0; interf.computeTick(); }else if(e.getSource() == play) { go = true; }else if(e.getSource() == pause) { go = false; }else if(e.getSource() == forward) { interf.tick += 100; interf.computeTick(); } } }