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.