JavaTM Platform
Standard Ed. 6

javax.swing
类 Timer

java.lang.Object
  继承者 javax.swing.Timer
所有已实现的接口:
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();

构造 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

字段摘要
protected  EventListenerList listenerList
           
 
构造方法摘要
Timer(int delay, ActionListener listener)
          创建一个 Timer 并将初始延迟和事件间延迟初始化为 delay 毫秒。
 
方法摘要
 void addActionListener(ActionListener listener)
          将一个动作侦听器添加到 Timer
protected  void fireActionPerformed(ActionEvent e)
          通知为此事件类型的通知而注册的所有侦听器。
 String getActionCommand()
          返回将作为此计时器所触发的 ActionEvent 中的动作命令传递的字符串。
 ActionListener[] getActionListeners()
          返回已在此计时器上注册的所有动作侦听器所组成的数组。
 int getDelay()
          返回两次触发动作事件间延迟,以毫秒为单位。
 int getInitialDelay()
          返回 Timer 的初始延迟。
<T extends EventListener>
T[]
getListeners(Class<T> listenerType)
          返回目前已在此 Timer 上注册为 FooListener 的所有对象所组成的数组。
static boolean getLogTimers()
          如果启用了日志记录,则返回 true
 boolean isCoalesce()
          如果 Timer 组合多个挂起的动作事件,则返回 true
 boolean isRepeats()
          如果 Timer 多次将一个动作事件发送到其侦听器,则返回 true(默认)。
 boolean isRunning()
          如果 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)
          如果 flagfalse,则指示 Timer 只向其侦听器发送一次动作事件。
 void start()
          启动 Timer,使它开始向其侦听器发送动作事件。
 void stop()
          停止 Timer,使它停止向其侦听器发送动作事件。
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

字段详细信息

listenerList

protected EventListenerList listenerList
构造方法详细信息

Timer

public Timer(int delay,
             ActionListener listener)
创建一个 Timer 并将初始延迟和事件间延迟初始化为 delay 毫秒。如果 delay 小于等于 0,则该计时器一启动就触发事件。如果 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 移除指定的动作侦听器。

参数:
listener - 要移除的侦听器

getActionListeners

public ActionListener[] getActionListeners()
返回已在此计时器上注册的所有动作侦听器所组成的数组。

返回:
此计时器的所有 ActionListener;如果当前没有注册任何动作侦听器,则返回一个空数组
从以下版本开始:
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 方法注册的。

可以用一个类字面值(比如 FooListener.class)指定 listenerType 参数。例如,可以使用下面的代码查询 Timer 实例 t 的动作侦听器:

ActionListener[] als = (ActionListener[])(t.getListeners(ActionListener.class));
如果不存在这样的侦听器,则此方法将返回一个空数组。

参数:
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;否则,返回 false
另请参见:
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 的初始延迟。

另请参见:
setInitialDelay(int), setDelay(int)

setRepeats

public void setRepeats(boolean flag)
如果 flagfalse,则指示 Timer 只向其侦听器发送一次动作事件。

参数:
flag - 指定 false 将使计时器在发送第一个动作事件之后停止

isRepeats

public boolean isRepeats()
如果 Timer 多次将一个动作事件发送到其侦听器,则返回 true(默认)。

另请参见:
setRepeats(boolean)

setCoalesce

public void setCoalesce(boolean flag)
设置 Timer 是否组合多个挂起的 ActionEvent 触发。忙碌的应用程序可能跟不上 Timer 的事件生成速度,导致多个动作事件排队。当处理这些事件时,应用程序会一个接一个地进行发送,导致 Timer 的侦听器收到一个没有事件间延迟的事件序列。组合操作可以将多个挂起的事件减少为一个事件,从而避免了这种情况的发生。默认情况下 Timer 将组合事件。

参数:
flag - 指定 false 将关闭组合

isCoalesce

public boolean isCoalesce()
如果 Timer 组合多个挂起的动作事件,则返回 true

另请参见:
setCoalesce(boolean)

setActionCommand

public void setActionCommand(String command)
设置将作为此计时器所触发的 ActionEvent 中的动作命令传递的字符串。null 是可接受的值。

参数:
command - 动作命令
从以下版本开始:
1.6

getActionCommand

public String getActionCommand()
返回将作为此计时器所触发的 ActionEvent 中的动作命令传递的字符串。可以为 nullnull 也是默认值。

返回:
在触发事件中使用的动作命令
从以下版本开始:
1.6

start

public void start()
启动 Timer,使它开始向其侦听器发送动作事件。

另请参见:
stop()

isRunning

public boolean isRunning()
如果 Timer 正在运行,则返回 true

另请参见:
start()

stop

public void stop()
停止 Timer,使它停止向其侦听器发送动作事件。

另请参见:
start()

restart

public void restart()
重新启动 Timer,取消所有挂起的触发并使它按初始延迟触发。


JavaTM Platform
Standard Ed. 6

提交错误或意见
有关更多的 API 参考资料和开发人员文档,请参阅 Java SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

版权所有 2007 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策