Java如何设置Swing Timer的初始延迟?

javax.swing.Timer在构造函数中指定的延迟时间过去之后,Swing对象将触发action事件。由于某些原因,您可能希望Timer该类在启动后立即触发。

为此,您可以通过调用setInitialDelay(int initialDelay)方法来设置计时器的初始延迟。下面的示例为您提供了一个示例。

package org.nhooo.example.swing;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class TimerInitialDelayDemo extends JFrame {
    private JLabel counterLabel = new JLabel();

    private Timer timer = null;

    public TimerInitialDelayDemo() throws HeadlessException {
        initUI();
    }

    private void initUI() {
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(200, 200);

        Container container = getContentPane();
        container.setLayout(new FlowLayout(FlowLayout.CENTER));
        container.add(counterLabel);

        timer = new Timer(1000, new MyActionListener());

        //设置Timer对象的初始延迟。设置初始延迟
        // 为零会导致计时器在触发后立即触发事件
        // 它开始了。
        timer.setInitialDelay(0);
        timer.start();
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new TimerInitialDelayDemo().setVisible(true);
            }
        });
    }

    class MyActionListener implements ActionListener {
        private int counter = 10;

        public void actionPerformed(ActionEvent e) {
            counter = counter - 1;
            String text = "<html><font size=\"14\">" +
                String.valueOf(counter) +
                "</font></head>";
            counterLabel.setText(text);
            if (counter == 0) {
                timer.stop();
            }
        }
    }
}