javax.swing.Timer
javax.swing
类 Timer
java.lang.Object
javax.swing.Timer
- 所有已实现的接口:
- Serializable
public class Timerextends Objectimplements Serializable
在指定时间间隔触发一个或多
在指定时间间隔触发一个或多个 ActionEvent
。一个示例用法是动画对象,它将 Timer
用作绘制其帧的触发器。
设置计时器的过程包括创建一个 Timer
对象,在该对象上注册一个或多个动作侦听器,以及使用 start
方法启动该计时器。例如,以下代码创建并启动一个每秒(该时间由 Timer
构造方法的第一个参数指定)触发一次动作事件的计时器。Timer
构造方法的第二个参数指定接收计时器动作事件的侦听器。
int delay = 1000; //milliseconds ActionListener taskPerformer = new ActionListener() { public void actionPerformed(ActionEvent evt) { //...Perform a task... } }; new Timer(delay, taskPerformer).start();
构造 Timer
时要指定一个延迟参数和一个 ActionListener
。延迟参数用于设置初始延迟和事件触发之间的延迟(以毫秒为单位)。启动了计时器后,它将在向已注册侦听器触发第一个 ActionEvent
之前等待初始延迟。第一个事件之后,每次超过事件间延迟时它都继续触发事件,直到被停止。
构造之后,可以单独更改初始延迟和事件间延迟,并且可以添加其他 ActionListener
。
如果希望计时器只在第一次时触发然后停止,可以对计时器调用 setRepeats(false)
。
尽管所有 Timer
都使用一个共享线程(由第一个执行操作的 Timer
对象创建)执行等待,但是 Timer
的动作事件处理程序还会在其他线程(事件指派线程上)执行。这意味着 Timer
的操作处理程序可以安全地在 Swing 组件上执行操作。但是,它也意味着处理程序必须快速执行以保证 GUI 作出响应。
在 1.3 版本中,向 Java 平台添加了另一个 Timer
类:java.util.Timer
。该类和 javax.swing.Timer
的基本功能相同,但是 java.util.Timer
更常用,功能更多。javax.swing.Timer
有两个特征,它们可以让使用 GUI 更方便。首先,其事件处理程序都是 GUI 程序员所熟悉的,并且可以更简单地处理事件指派线程。第二,其自动线程共享意味着不必采取特殊步骤来避免生成过多线程。相反,计时器使用同一个线程让光标闪烁、使工具提示显示等等。
通过查看 The Java Tutorial 中的 How to Use Timers 一节,可以找到使用计时器的更详细的文档和几个示例。有关在此 Timer
类和 java.util.Timer
之间进行选择的更多示例和帮助信息,请参阅 The Swing Connection 中的 Using Timers in Swing Applications 一文。
警告:此类的序列化对象与以后的 Swing 版本不兼容。当前序列化支持适用于短期存储,或适用于在运行相同 Swing 版本的应用程序之间进行 RMI(Remote Method Invocation,远程方法调用)。从 1.4 版本开始,已在 java.beans
包中添加了支持所有 JavaBeansTM 长期存储的功能。请参阅 XMLEncoder
。
- 另请参见:
java.util.Timer
-
1 import javax.swing.Timer;