1

私はJavaスイングタイマーと本当に混同しています。アクションリスナーが必要ですか?誰かが私に例を教えてください。ありがとう!

4

2 に答える 2

12

の使用例を次に示し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();
            }
        });
    }
}
于 2012-11-21T23:37:06.610 に答える
5

タイマーの設定には、Timer オブジェクトの作成、 1 つ以上のアクション リスナーの登録、および start メソッドを使用したタイマーの開始が含まれます。たとえば、次のコードは、(Timer コンストラクターの最初の引数で指定されたとおりに) 1 秒に 1 回アクション イベントを発生させるタイマーを作成して開始します。Timer コンストラクターの 2 番目の引数は、タイマーのアクション イベントを受け取るリスナーを指定します。タイマーは、遅延パラメーターと ActionListener の両方を指定することによって構築されます。(ソース

さらに、タイマーのタイミングは、ActionListener でコードを実行するスレッドであるイベント ディスパッチ スレッド (または EDT) とは別のスレッドで行われます。そのため、actionPerformed コードが遅い場合でも、タイマーは関係なく起動し続け、その actionPerformed コードをイベント キューにキューに入れます。これはバックアップされる可能性が高く、イベント スレッドが詰まり、アプリケーションが応答しなくなるか、応答が遅くなり、売れ残りになります。合体true( source ) に設定します。

ここに良いチュートリアルがあります スイングタイマーの使い方

于 2012-11-21T23:38:37.627 に答える