我真的对 Java 摆动计时器感到困惑。它需要一个动作监听器吗?有人可以给我一个例子吗?谢谢!
user1832583
问问题
16346 次
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 对象,在其上注册一个或多个动作侦听器,并使用 start 方法启动计时器。例如,以下代码创建并启动一个计时器,该计时器每秒触发一次动作事件(由 Timer 构造函数的第一个参数指定)。Timer 构造函数的第二个参数指定一个监听器来接收定时器的动作事件。计时器是通过指定延迟参数和 ActionListener 来构造的。(来源)
此外,计时器的计时是在与事件调度线程(或 EDT)不同的线程中完成的,后者是运行 ActionListener 中的代码的线程。因此,即使 actionPerformed 代码很慢,计时器仍将继续触发,并将其 actionPerformed 代码排入事件队列中,这可能会被备份,事件线程将被阻塞,应用程序将无响应或响应不佳,取消销售您将合并设置为true
(source)。
这是一个很好的教程如何使用摆动计时器
于 2012-11-21T23:38:37.627 回答