- 所有已实现的接口:
-
Serializable
ActionEvent
。一个示例用途是一个动画对象,它使用Timer
作为绘制帧的触发器。
设置定时器涉及创建一个Timer
对象,在其上注册一个或多个动作监听器,并使用start
方法启动定时器。例如,以下代码创建并启动一个定时器,每秒触发一个动作事件(由Timer
构造函数的第一个参数指定)。Timer
构造函数的第二个参数指定一个监听器,用于接收定时器的动作事件。
int delay = 1000; //毫秒 ActionListener taskPerformer = new ActionListener() { public void actionPerformed(ActionEvent evt) { //...执行任务... } }; new Timer(delay, taskPerformer).start();
Timer
通过指定延迟参数和一个ActionListener>来构造。延迟参数用于设置初始延迟和事件触发之间的延迟,单位为毫秒。一旦定时器启动,它会在第一次事件触发之前等待初始延迟,然后继续在每次事件间隔经过后触发事件,直到停止。
在构造后,初始延迟和事件间隔可以独立更改,并且可以添加额外的ActionListeners
。
如果希望定时器仅在第一次触发后停止,请在定时器上调用setRepeats(false)
。
尽管所有Timer
都使用单个共享线程执行等待(由执行的第一个Timer
对象创建),但Timer
的动作事件处理程序在另一个线程上执行 -- 事件分派线程。这意味着Timer
的动作处理程序可以安全地在Swing组件上执行操作。但是,这也意味着处理程序必须快速执行,以保持GUI的响应性。
在v 1.3中,Java平台添加了另一个Timer
类:java.util.Timer
。它和javax.swing.Timer
提供相同的基本功能,但java.util.Timer
更通用,功能更多。javax.swing.Timer
有两个功能,可以使其在GUI中更容易使用。首先,它的事件处理隐喻对GUI程序员来说很熟悉,可以使处理事件分派线程变得更简单。其次,其自动线程共享意味着您无需采取特殊步骤来避免生成过多线程。相反,您的定时器使用与使光标闪烁、工具提示出现等相同的线程。
您可以通过访问如何使用定时器中的部分,在Java教程中找到更多文档和使用定时器的示例。
警告: 该类的序列化对象将不兼容未来的Swing版本。当前的序列化支持适用于短期存储或在运行相同Swing版本的应用程序之间的RMI。从1.4开始,已将所有JavaBeans的长期存储支持添加到java.beans
包中。请参阅XMLEncoder
。
- 自版本:
- 1.2
- 参见:
-
Field Summary
-
Constructor Summary
ConstructorDescriptionTimer
(int delay, ActionListener listener) 创建一个
Timer
,并将初始延迟和事件之间的延迟都初始化为delay
毫秒。 -
Method Summary
Modifier and TypeMethodDescriptionvoid
addActionListener
(ActionListener listener) 向
Timer
添加一个动作监听器。protected void
通知所有已注册对此事件类型感兴趣的监听器。
返回作为该定时器触发
ActionEvent
中的动作命令的字符串。返回在此定时器上注册的所有动作监听器的数组。
int
getDelay()
返回事件触发之间的延迟,单位为毫秒。
int
返回
Timer
的初始延迟。<T extends EventListener>
T[]getListeners
(Class<T> listenerType) 返回当前在此
Timer
上注册为FooListener
的所有对象的数组。static boolean
如果启用了日志记录,则返回
true
。boolean
如果
Timer
合并多个待处理的动作事件,则返回true
。boolean
如果
Timer
将多次向其监听器发送动作事件,则返回true
(默认值)。boolean
如果
Timer
正在运行,则返回true
。void
removeActionListener
(ActionListener listener) 从
Timer
中删除指定的动作监听器。void
restart()
重新启动
Timer
,取消任何待处理的事件,并导致其以初始延迟触发。void
setActionCommand
(String command) 设置作为该定时器触发
ActionEvent
中的动作命令的字符串。void
setCoalesce
(boolean flag) 设置
Timer
是否合并多个待处理的ActionEvent
触发。void
setDelay
(int delay) 设置
Timer
的事件之间的延迟,即连续动作事件之间的毫秒数。void
setInitialDelay
(int initialDelay) 设置
Timer
的初始延迟,即在定时器启动后等待多少毫秒才触发第一个事件。static void
setLogTimers
(boolean flag) 启用或禁用定时器日志。
void
setRepeats
(boolean flag) 如果
flag
为false
,则指示Timer
仅向其监听器发送一个动作事件。void
start()
启动
Timer
,导致它开始向其监听器发送动作事件。void
stop()
停止
Timer
,导致它停止向其监听器发送动作事件。
-
Field Details
-
listenerList
注册的监听器集合
-
-
Constructor Details
-
Timer
创建一个
Timer
,并将初始延迟和事件之间的延迟都初始化为delay
毫秒。如果delay
小于或等于零,则定时器在启动时立即触发。如果listener
不为null
,则将其注册为定时器的动作监听器。- 参数:
-
delay
- 初始延迟和事件之间的毫秒数 -
listener
- 初始监听器;可以为null
- 参见:
-
-
Method Details
-
addActionListener
向
Timer
添加一个动作监听器。- 参数:
-
listener
- 要添加的监听器 - 参见:
-
removeActionListener
从
Timer
中删除指定的动作监听器。- 参数:
-
listener
- 要移除的监听器
-
getActionListeners
返回在此定时器上注册的所有动作监听器的数组。
- 返回:
-
所有定时器的
ActionListener
或如果当前未注册任何动作监听器,则返回空数组 - 自版本:
- 1.4
- 参见:
-
fireActionPerformed
通知所有已注册对此事件类型感兴趣的监听器。
- 参数:
-
e
- 要触发的动作事件 - 参见:
-
getListeners
返回当前在此
Timer
上注册为FooListener
的所有对象的数组。使用addFooListener
方法注册FooListener
。您可以使用类字面量(例如
FooListener.class
)指定listenerType
参数。例如,您可以使用以下代码查询Timer
实例t
的动作监听器:ActionListener[] als = (ActionListener[])(t.getListeners(ActionListener.class));
如果不存在此类监听器,则此方法返回一个空数组。- 类型参数:
-
T
- 请求的EventListener
类的类型 - 参数:
-
listenerType
- 请求的监听器类型;此参数应指定一个从java.util.EventListener
继承的接口 - 返回:
-
在此定时器上注册为
FooListener
的所有对象的数组,如果尚未添加此类监听器,则返回一个空数组 - 抛出:
-
ClassCastException
- 如果listenerType
未指定实现java.util.EventListener
的类或接口 - 自版本:
- 1.3
- 参见:
-
setLogTimers
public static void setLogTimers(boolean flag) 启用或禁用定时器日志。启用时,定时器触发时会向
System.out
发布一条消息。- 参数:
-
flag
-true
表示启用日志记录 - 参见:
-
getLogTimers
public static boolean getLogTimers()返回true
如果日志记录已启用。- 返回:
-
如果日志记录已启用,则返回
true
; 否则返回false - 参见:
-
setDelay
public void setDelay(int delay) 设置Timer
的事件之间的延迟时间,即连续动作事件之间的毫秒数。这不会影响初始延迟属性,初始延迟可以通过setInitialDelay
方法设置。- 参数:
-
delay
- 毫秒为单位的延迟时间 - 参见:
-
getDelay
public int getDelay()返回动作事件触发之间的延迟时间,以毫秒为单位。- 返回:
- 动作事件触发之间的延迟时间,以毫秒为单位
- 参见:
-
setInitialDelay
public void setInitialDelay(int initialDelay) 设置Timer
的初始延迟时间,即在定时器启动后触发第一个事件之前等待的毫秒数。在构造时,这被设置为与事件之间的延迟时间相同,但然后其值是独立的,并且不受对事件之间延迟时间的更改的影响。- 参数:
-
initialDelay
- 初始延迟时间,以毫秒为单位 - 参见:
-
getInitialDelay
public int getInitialDelay()返回Timer
的初始延迟时间。- 返回:
-
Timer
的初始延迟时间,以毫秒为单位 - 参见:
-
setRepeats
public void setRepeats(boolean flag) 如果flag
为false
,则指示Timer
仅向其侦听器发送一个动作事件。- 参数:
-
flag
- 指定false
以使计时器在发送其第一个动作事件后停止
-
isRepeats
public boolean isRepeats()返回true
(默认值),如果Timer
将向其侦听器多次发送动作事件。- 返回:
-
如果
Timer
将向其侦听器多次发送动作事件,则返回true - 参见:
-
setCoalesce
public void setCoalesce(boolean flag) 设置Timer
是否合并多个待处理的ActionEvent
触发。繁忙的应用程序可能无法跟上Timer
的事件生成,导致多个动作事件被排队。在处理时,应用程序会依次发送这些事件,导致Timer
的侦听器接收到一系列没有延迟的事件。合并避免了这种情况,将多个待处理事件减少为单个事件。默认情况下,Timer
会合并事件。- 参数:
-
flag
- 指定false
以关闭合并
-
isCoalesce
public boolean isCoalesce()返回true
如果Timer
合并多个待处理的动作事件。- 返回:
-
如果
Timer
合并多个待处理的动作事件,则返回true - 参见:
-
setActionCommand
设置将作为此计时器触发的ActionEvent
中的操作命令传递的字符串。null
是可接受的值。- 参数:
-
command
- 操作命令 - 自1.6起:
- 1.6
-
getActionCommand
返回将作为此计时器触发的ActionEvent
中的操作命令传递的字符串。可能为null
,这也是默认值。- 返回:
- 用于触发事件的操作命令
- 自1.6起:
- 1.6
-
start
public void start()启动Timer
,使其开始向其侦听器发送动作事件。- 参见:
-
isRunning
public boolean isRunning()返回true
如果Timer
正在运行。- 返回:
-
如果
Timer
正在运行,则返回true,否则返回false - 参见:
-
stop
public void stop()停止Timer
,使其停止向其侦听器发送动作事件。- 参见:
-
restart
public void restart()重新启动Timer
,取消任何待处理的事件,并使其以初始延迟时间触发。
-