Package aurelienribon.utils.swing

Source Code of aurelienribon.utils.swing.DrawingCanvas$Callback

package aurelienribon.utils.swing;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JPanel;
import javax.swing.Timer;

/**
* @author Aurelien Ribon | http://www.aurelienribon.com
*/
public abstract class DrawingCanvas extends JPanel {
  private final Timer timer;
  private long lastMillis;
  private Callback callback;

  public DrawingCanvas() {
    timer = new Timer(1000/60, loop);
    timer.setRepeats(true);
  }

  protected abstract void update(int elapsedMillis);

  public DrawingCanvas start() {
    lastMillis = System.currentTimeMillis();
    timer.start();
    return this;
  }

  public void stop() {
    timer.stop();
  }

  public void setCallback(Callback callback) {
    this.callback = callback;
  }

  private final ActionListener loop = new ActionListener() {
    @Override public void actionPerformed(ActionEvent e) {
      final long millis = System.currentTimeMillis();
      final long delta = millis - lastMillis;
      lastMillis = millis;

      update((int) delta);
      if (callback != null) callback.onUpdate((int) delta);
    }
  };

  public interface Callback {
    public void onUpdate(int elapsedMillis);
  }
}
TOP

Related Classes of aurelienribon.utils.swing.DrawingCanvas$Callback

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.