- 所有已实现的接口:
-
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
Fields -
Constructor Summary
ConstructorsConstructorDescriptionTimer(int delay, ActionListener listener) 创建一个Timer,并将初始延迟和事件之间的延迟都初始化为delay毫秒。 -
Method Summary
Modifier and TypeMethodDescriptionvoidaddActionListener(ActionListener listener) 向Timer添加一个动作监听器。protected void通知所有已注册对此事件类型感兴趣的监听器。返回作为该定时器触发ActionEvent中的动作命令的字符串。返回在此定时器上注册的所有动作监听器的数组。intgetDelay()返回事件触发之间的延迟,单位为毫秒。int返回Timer的初始延迟。<T extends EventListener>
T[]getListeners(Class<T> listenerType) 返回当前在此Timer上注册为FooListener的所有对象的数组。static boolean如果启用了日志记录,则返回true。boolean如果Timer合并多个待处理的动作事件,则返回true。boolean如果Timer将多次向其监听器发送动作事件,则返回true(默认值)。boolean如果Timer正在运行,则返回true。voidremoveActionListener(ActionListener listener) 从Timer中删除指定的动作监听器。voidrestart()重新启动Timer,取消任何待处理的事件,并导致其以初始延迟触发。voidsetActionCommand(String command) 设置作为该定时器触发ActionEvent中的动作命令的字符串。voidsetCoalesce(boolean flag) 设置Timer是否合并多个待处理的ActionEvent触发。voidsetDelay(int delay) 设置Timer的事件之间的延迟,即连续动作事件之间的毫秒数。voidsetInitialDelay(int initialDelay) 设置Timer的初始延迟,即在定时器启动后等待多少毫秒才触发第一个事件。static voidsetLogTimers(boolean flag) 启用或禁用定时器日志。voidsetRepeats(boolean flag) 如果flag为false,则指示Timer仅向其监听器发送一个动作事件。voidstart()启动Timer,导致它开始向其监听器发送动作事件。voidstop()停止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,取消任何待处理的事件,并使其以初始延迟时间触发。
-