Java/Swing Components/Timer
Timer Bean
<source lang="java">
/**
* @version 1.10 1999-09-28 * @author Cay Horstmann */
import java.io.Serializable; import java.util.Date; import java.util.EventListener; import java.util.EventObject; import java.util.Vector; public class TimerBean implements Runnable, Serializable {
public int getInterval() { return interval; } public void setInterval(int i) { interval = i; } public boolean isRunning() { return runner != null; } public void setRunning(boolean b) { if (b && runner == null) { runner = new Thread(this); runner.start(); } else if (!b && runner != null) { runner.interrupt(); runner = null; } } public synchronized void addTimerListener(TimerListener l) { timerListeners.addElement(l); } public synchronized void removeTimerListener(TimerListener l) { timerListeners.removeElement(l); } public void fireTimerEvent(TimerEvent evt) { Vector currentListeners = null; synchronized (this) { currentListeners = (Vector) timerListeners.clone(); } for (int i = 0; i < currentListeners.size(); i++) { TimerListener listener = (TimerListener) currentListeners .elementAt(i); listener.timeElapsed(evt); } } public void run() { if (interval <= 0) return; try { while (!Thread.interrupted()) { Thread.sleep(interval); fireTimerEvent(new TimerEvent(this)); } } catch (InterruptedException e) { } } private int interval = 1000; private Vector timerListeners = new Vector(); private Thread runner;
} class TimerEvent extends EventObject {
public TimerEvent(Object source) { super(source); now = new Date(); } public Date getDate() { return now; } private Date now;
} interface TimerListener extends EventListener {
public void timeElapsed(TimerEvent evt);
}
</source>