与Java Swing Timer混淆

我真的很困惑Java swing计时器。 它需要一个动作监听器吗? 有人可以举个例子吗? 谢谢!

以下是使用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对象 ,在其上注册一个或多个动作侦听器 ,以及使用start方法启动计时器。 例如,以下代码创建并启动一个计时器,该计时器每秒触发一次动作事件(由Timer构造函数的第一个参数指定)。 Timer构造函数的第二个参数指定一个侦听器来接收计时器的操作事件。 通过指定延迟参数和ActionListener来构造计时器 。 ( 来源 )

此外,计时器的计时是在与事件派发线程(或EDT)不同的线程中完成的,事件派发线程是在ActionListener中运行代码的线程。 因此,即使actionPerformed代码很慢,计时器也将继续触发,并将其actionPerformed代码排队在事件队列上,该代码可能会被备份,事件线程将被阻塞,应用程序将无法响应或响应不佳,unsell你将coalesce设置为true ( 源 )。

这是一个很好的tuturial 如何使用摆动计时器