- java.lang.Object
-
- javax.swing.Timer
-
- All Implemented Interfaces:
-
Serializable
public class Timer extends Object implements 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();
通过指定延迟参数和
Timers
来构造ActionListener
。 延迟参数用于设置事件触发之间的初始延迟和延迟(以毫秒为单位)。 一旦定时器启动,它将等待初始延迟,然后再将其ActionEvent
发送到注册的监听器。 在这个第一个事件之后,它会在每次事件间延迟过去之后继续发生事件,直到它停止。施工后,初始延迟和事件间延迟可以独立更改,另外可以添加
ActionListeners
。如果你想让定时器第一次触发,然后停止,在定时器上调用
setRepeats(false)
。虽然所有
Timer
都使用单个共享线程(由执行的第一个Timer
对象创建)来执行等待,但是在另一个线程(事件调度线程)上执行Timer
的动作事件处理程序。 这意味着Timer
的操作处理程序可以安全地对Swing组件执行操作。 但是,这也意味着处理程序必须快速执行以保持GUI的响应。在v 1.3中,另一个
Timer
类被添加到Java平台:java.util.Timer
。 它和javax.swing.Timer
提供了相同的基本功能,但是java.util.Timer
更通用,具有更多的功能。javax.swing.Timer
有两个功能可以使它更容易与GUI一起使用。 首先,它的事件处理隐喻是GUI程序员熟悉的,可以使处理事件调度线程更简单一些。 其次,它的自动线程共享意味着你不必采取特殊的步骤来避免产生太多的线程。 相反,您的计时器使用与使光标闪烁相同的线程,显示工具提示等。您可以通过访问How to Use Timers (Java教程中的一节)找到更多文档和使用计时器的几个示例。 有关更多示例和帮助,选择此
Timer
类和java.util.Timer
,请参阅Using Timers in Swing Applications , Swing连接中的一篇文章。警告:此类的序列化对象与将来的Swing版本不兼容。 当前的序列化支持适用于运行相同版本的Swing的应用程序之间的短期存储或RMI。 从1.4开始,支持所有JavaBeans的长期存储已被添加到
java.beans
包中。 请参阅XMLEncoder
。- 从以下版本开始:
- 1.2
- 另请参见:
-
Timer
, Serialized Form
-
-
Field Summary
Fields Modifier and Type Field 描述 protected EventListenerList
listenerList
收集注册听众
-
构造方法摘要
构造方法 Constructor 描述 Timer(int delay, ActionListener listener)
创建一个Timer
并将初始延迟和事件间延迟初始化为delay
毫秒。
-
方法摘要
所有方法 静态方法 接口方法 具体的方法 Modifier and Type 方法 描述 void
addActionListener(ActionListener listener)
在Timer
添加一个动作侦听Timer
。protected void
fireActionPerformed(ActionEvent e)
通知所有在此事件类型上通知有兴趣的听众。String
getActionCommand()
返回将由此定时器触发的ActionEvent
s中的action命令传递的字符串。ActionListener[]
getActionListeners()
返回在此定时器上注册的所有动作侦听器的数组。int
getDelay()
返回动作事件触发之间的延迟(以毫秒为单位)。int
getInitialDelay()
返回Timer
的初始延迟。<T extends EventListener>
T[]getListeners(Class<T> listenerType)
返回当前注册为FooListener
的所有对象的数组,此Timer
。static boolean
getLogTimers()
如果启用日志记录,则返回true
。boolean
isCoalesce()
如果Timer
合并了多个待处理的动作事件,则返回true
。boolean
isRepeats()
返回true
(默认),如果Timer
将多次向其侦听器发送一个动作事件。boolean
isRunning()
如果Timer
正在运行,则返回true
。void
removeActionListener(ActionListener listener)
从Timer
删除指定的动作侦听Timer
。void
restart()
重新启动Timer
,取消任何未决的发射,并使其以其初始延迟触发。void
setActionCommand(String command)
将此定时器触发的ActionEvent
的action命令设置为要传递的字符串。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
,导致它停止向其监听器发送动作事件。
-
-
-
字段详细信息
-
listenerList
protected EventListenerList listenerList
收集注册听众
-
-
构造方法详细信息
-
Timer
public Timer(int delay, ActionListener listener)
创建一个Timer
并将初始延迟和事件间延迟初始化为delay
毫秒。 如果delay
小于或等于零,定时器在启动时立即触发。 如果listener
不是null
,它在定时器上注册为动作侦听器。- 参数
-
delay
- 初始事件和事件间延迟的毫秒数 -
listener
- 初始听众; 可以是null
- 另请参见:
-
addActionListener(java.awt.event.ActionListener)
,setInitialDelay(int)
,setRepeats(boolean)
-
-
方法详细信息
-
addActionListener
public void addActionListener(ActionListener listener)
添加一个动作监听器到Timer
。- 参数
-
listener
- 要添加的侦听器 - 另请参见:
-
Timer(int, java.awt.event.ActionListener)
-
removeActionListener
public void removeActionListener(ActionListener listener)
从Timer
删除指定的动作侦听Timer
。- 参数
-
listener
- 要删除的侦听器
-
getActionListeners
public ActionListener[] getActionListeners()
返回在此定时器上注册的所有动作侦听器的数组。- 结果
-
所有定时器的
ActionListener
s或一个空数组,如果没有动作侦听器当前注册 - 从以下版本开始:
- 1.4
- 另请参见:
-
addActionListener(java.awt.event.ActionListener)
,removeActionListener(java.awt.event.ActionListener)
-
fireActionPerformed
protected void fireActionPerformed(ActionEvent e)
通知所有在此事件类型上通知有兴趣的听众。- 参数
-
e
- 要触发的动作事件 - 另请参见:
-
EventListenerList
-
getListeners
public <T extends EventListener> T[] getListeners(Class<T> listenerType)
返回此Timer
当前注册为FooListener
的所有对象的数组。FooListener
使用addFooListener
注册。您可以使用类文字指定
listenerType
参数,如FooListener.class
。 例如,您可以使用以下代码查询Timer
实例t
其操作侦听器:ActionListener[] als = (ActionListener[])(t.getListeners(ActionListener.class));
如果没有这样的侦听器存在,这个方法返回一个空数组。- 参数类型
-
T
- 正在请求类型的EventListener
- 参数
-
listenerType
- 所请求的听众的类型; 此参数应指定从java.util.EventListener
下降的接口 - 结果
-
在该定时器上注册为
FooListener
的所有对象的数组,如果没有添加此类侦听器,则为空数组 - 异常
-
ClassCastException
- 如果listenerType
未指定实现java.util.EventListener
的类或接口 - 从以下版本开始:
- 1.3
- 另请参见:
-
getActionListeners()
,addActionListener(java.awt.event.ActionListener)
,removeActionListener(java.awt.event.ActionListener)
-
setLogTimers
public static void setLogTimers(boolean flag)
启用或禁用定时器日志。 启用时,每当定时器关闭时,消息将发布到System.out
。- 参数
-
flag
-true
启用日志记录 - 另请参见:
-
getLogTimers()
-
getLogTimers
public static boolean getLogTimers()
如果启用日志记录,则返回true
。- 结果
-
true
如果启用日志记录; 否则,假 - 另请参见:
-
setLogTimers(boolean)
-
setDelay
public void setDelay(int delay)
设置Timer
的事件间延迟,连续动作事件之间的毫秒数。 这不影响初始延迟属性,可以通过setInitialDelay
方法设置。- 参数
-
delay
- 以毫秒为单位的延迟 - 另请参见:
-
setInitialDelay(int)
-
getDelay
public int getDelay()
返回动作事件触发之间的延迟(以毫秒为单位)。- 结果
- 动作事件发射之间的延迟(以毫秒为单位)
- 另请参见:
-
setDelay(int)
,getInitialDelay()
-
setInitialDelay
public void setInitialDelay(int initialDelay)
设置Timer
的初始延迟,在触发第一个事件之前在定时器启动后等待的时间(以毫秒为单位)。 在构造时,这被设置为与事件间延迟相同,但是其值是独立的,并且不受事件延迟之间的改变的影响。- 参数
-
initialDelay
- 初始延迟(以毫秒为单位) - 另请参见:
-
setDelay(int)
-
getInitialDelay
public int getInitialDelay()
返回Timer
的初始延迟。- 结果
-
Timer
的初始延迟,以毫秒为单位 - 另请参见:
-
setInitialDelay(int)
,setDelay(int)
-
setRepeats
public void setRepeats(boolean flag)
如果flag
为false
,则指示Timer
只向其侦听器发送一个操作事件。- 参数
-
flag
- 指定false
,使定时器在发送第一个动作事件后停止
-
isRepeats
public boolean isRepeats()
返回true
(默认),如果Timer
将多次向其侦听器发送操作事件。- 结果
-
如果
Timer
将多次向其侦听器发送一个动作事件,Timer
true - 另请参见:
-
setRepeats(boolean)
-
setCoalesce
public void setCoalesce(boolean flag)
设置Timer
是否合并多个待处理的ActionEvent
点火。 繁忙的应用程序可能无法跟上Timer
的事件生成,导致多个操作事件排队。 处理后,应用程序一个接一个地发送这些事件,导致Timer
的侦听器在它们之间没有任何延迟地接收一系列事件。 合并通过将多个未决事件减少为单个事件来避免这种情况。Timer
默认合并事件。- 参数
-
flag
- 指定false
关闭合并
-
isCoalesce
public boolean isCoalesce()
如果Timer
合并了多个待处理的动作事件,则返回true
。- 结果
-
如果
Timer
合并多个待处理的动作事件,Timer
true - 另请参见:
-
setCoalesce(boolean)
-
setActionCommand
public void setActionCommand(String command)
将此定时器触发的ActionEvent
的动作命令设置为要传递的字符串。null
是可接受的值。- 参数
-
command
- 动作命令 - 从以下版本开始:
- 1.6
-
getActionCommand
public String getActionCommand()
返回将由此定时器触发的ActionEvent
的action命令发送的字符串。 可能是null
,也是默认值。- 结果
- 用于触发事件的动作命令
- 从以下版本开始:
- 1.6
-
start
public void start()
启动Timer
,使其开始向其监听器发送动作事件。- 另请参见:
-
stop()
-
isRunning
public boolean isRunning()
如果Timer
正在运行,则返回true
。- 结果
-
如果
Timer
正在运行,Timer
true,否则为false - 另请参见:
-
start()
-
stop
public void stop()
停止Timer
,使其停止向其监听器发送操作事件。- 另请参见:
-
start()
-
restart
public void restart()
重新启动Timer
,取消任何未决的发射,并使其最初的延迟触发。
-
-