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(); } } } }