タイマー


そして時は動き出す

Swing では、新しくタイマー機能がサポートされています
これを利用することによって、一定時間経過後にリスナを呼び出す処理を実現できます
タイマーは javax.swing.Timer クラスで実装されています

public class Timer extends Object implements Serializable

このクラスのコンストラクタは次のようになっています

public Timer(int delay , ActionListener listener)

delay には、タイマーイベントが発生する感覚をミリ秒単位で
listener には呼び出すべきリスナを指定しますが、null でもかまいません

通常は、コンストラクタでリスナを登録しますが
このほかにも Timer.addActionListener() メソッドで登録することができます
登録されているリスナを削除するには Timer.removeActionListener() を使います

public void addActionListener(ActionListener listener)
public void removeActionListener(ActionListener listener)

listener には、登録、又は削除するリスナを指定します

イベントトリガとなる遅延時間は Timer.setDelay() で設定でき
Timer.getDelay() メソッドを使って取得することができます

public void setDelay(int delay)
public int getDelay()

delay には、新しい遅延時間をミリ秒単位で指定します

Timer インスタンスを作成しただけでは、タイマーイベントは発生しません
タイマーを起動するには Timer.start() メソッドを使い
起動したタイマーを止めるには Timer.stop() メソッドを使います
また、再起動には Timer.restart() メソッドを使います

public void start()
public void stop()
public void restart()

再起動後のタイマーの1回目の実行は、初期遅延が経過してから終了します
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Test extends JApplet implements ActionListener {
	Timer timer;
	int iCount = 0;
	public void init() {
		timer = new Timer(200 , this);
		timer.start();
	}
	public void actionPerformed(ActionEvent e) {
		iCount++;
		repaint();
	}
	public void paint(Graphics g) {
		g.setColor(Color.WHITE);
		g.fillRect(0 , 0 , getSize().width , getSize().height);
		g.setColor(Color.BLACK);
		g.drawString("カウンタ = " + iCount , 0 , 20);
	}
}


速度を必要としない継続的処理は、タイマーを用いることで解決できます
スレッドを用いる方法に比べれば、確実で安全な方法となるでしょう



前のページへ戻る次のページへ