私はJavaスイングタイマーと本当に混同しています。アクションリスナーが必要ですか?誰かが私に例を教えてください。ありがとう!
2 に答える
の使用例を次に示しjavax.swing.Timer
ます。
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
public class SimpleTimer extends JFrame
{
private JLabel label;
private Timer timer;
private int counter = 10; // the duration
private int delay = 1000; // every 1 second
private static final long serialVersionUID = 1L;
public SimpleTimer()
{
super("Simple Timer");
setDefaultCloseOperation(EXIT_ON_CLOSE);
label = new JLabel("Wait for " + counter + " sec", JLabel.CENTER);
JPanel contentPane = (JPanel) getContentPane();
contentPane.add(label, BorderLayout.CENTER);
contentPane.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
pack();
ActionListener action = new ActionListener()
{
@Override
public void actionPerformed(ActionEvent event)
{
if(counter == 0)
{
timer.stop();
label.setText("The time is up!");
}
else
{
label.setText("Wait for " + counter + " sec");
counter--;
}
}
};
timer = new Timer(delay, action);
timer.setInitialDelay(0);
timer.start();
setVisible(true);
}
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
new SimpleTimer();
}
});
}
}
タイマーの設定には、Timer オブジェクトの作成、 1 つ以上のアクション リスナーの登録、および start メソッドを使用したタイマーの開始が含まれます。たとえば、次のコードは、(Timer コンストラクターの最初の引数で指定されたとおりに) 1 秒に 1 回アクション イベントを発生させるタイマーを作成して開始します。Timer コンストラクターの 2 番目の引数は、タイマーのアクション イベントを受け取るリスナーを指定します。タイマーは、遅延パラメーターと ActionListener の両方を指定することによって構築されます。(ソース)
さらに、タイマーのタイミングは、ActionListener でコードを実行するスレッドであるイベント ディスパッチ スレッド (または EDT) とは別のスレッドで行われます。そのため、actionPerformed コードが遅い場合でも、タイマーは関係なく起動し続け、その actionPerformed コードをイベント キューにキューに入れます。これはバックアップされる可能性が高く、イベント スレッドが詰まり、アプリケーションが応答しなくなるか、応答が遅くなり、売れ残りになります。合体をtrue
( source ) に設定します。
ここに良いチュートリアルがあります スイングタイマーの使い方