8.7.3 | Timer |
Nicht zu verwechseln mit java.util.Timer ist diese nützliche Klasse, die es ermöglicht, in festen Abständen Dinge starten zu lassen.
Möchte man beispielsweise eine Animation ablaufen lassen, so kann man dies leicht mit folgenden Code erreichen:
// Jede Sekunde (1000 Millisekunden) ein neues Bild
int delay = 1000;
Timer t = new Timer(delay, new ActionListener() {
public void actionPerformed(ActionEvent e) {
// Neues Bild zeichnen
}
});
t.start();
Über die Methoden start(), stop() und restart() kann man den Ablauf steuern. Die Methode setInitialDelay(int initialDelay) ermöglicht es überdies, die Zeit bis zwischen dem start()-Methodenaufruf und dem ersten ActionEvent anzugeben.
Damit kann man beispielsweise einen Tooltip steuern:
final Timer toolTipTimer = new Timer (0,
new ActionListener() {
public void actionPerformed(ActionEvent e) {
// Tooltip anzeigen
}
});
// Nach einer Sekunde soll der Tooltip angezeigt werden
toolTipTimer.setInitialDelay(1000);
// Der Tooltip soll nur einmal erscheinen und
// nicht immer wieder
toolTipTimer.setRepeats(false);
component.addMouseListener(new MouseAdapter() {
public void mouseMoved(MouseEvent e) {
// Wenn sich der Mauszeiger bewegt,
// dann wieder warten, bis eine
// Sekunde lang der Mauszeiger
// nicht bewegt wird
toolTipTimer.restart();
}
public void mouseExited(MouseEvent e) {
// Wenn der Benutzer die Komponente
// verlässt, soll kein Tooltip
// mehr angezeigt werden
toolTipTimer.stop();
}
});
Wenn der Benutzer die Maus bewegt, wird der Timer kontinuierlich neu gestartet - es wird nie die Initialzeit von einer Sekunde erreicht. Bleibt der Benutzer allerdings mit der Maus stehen und dauert dies eine Sekunde, wird die actionPerformed(ActionEvent e)-Methode aufgerufen. Bewegt der Benutzer die Maus dann weiter, beginnt das Spiel von neuem. Damit der Tooltip nur angezeigt wird, wenn der Mauszeiger in der Komponente ist, deaktivieren wir den Timer, wenn die Maus die Komponente verlässt.