JavaTM 2 Platform
Standard Ed. 5.0

javax.swing
类 Timer

java.lang.Object
  继承者 javax.swing.Timer
所有已实现的接口:
Serializable

public class Timer
extends Object
implements Serializable

在指定延迟之后激发一个或多个操作事件。例如,动画对象可以将 Timer 用作绘制其帧 (frame) 的触发器。

设置一个计时器包括创建一个 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 有一个或多个操作侦听器和一个 delay(操作事件之间的时间)。经过 delay 毫秒后,该 Timer 将激发一个其侦听器的操作事件。默认情况下,调用 stop 方法之前此循环将重复进行。如果希望计时器只激发一次,则调用该计时器上的 setRepeats(false)。要使第一个操作事件之前的延迟不同于事件之间的延迟,请使用 setInitialDelay 方法。

尽管所有 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)
          创建一个每 delay 毫秒将通知其侦听器的 Timer
 
方法摘要
 void addActionListener(ActionListener listener)
          将一个操作侦听器添加到 Timer
protected  void fireActionPerformed(ActionEvent e)
          通知为此事件类型的通知而注册的所有侦听器。
 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 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)
创建一个每 delay 毫秒将通知其侦听器的 Timer。如果 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 移除指定的操作侦听器。

参数:
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 的延迟,两次连续的操作事件之间的毫秒数。

参数:
delay - 以毫秒为单位的延迟
另请参见:
setInitialDelay(int)

getDelay

public int getDelay()
返回两次激发操作事件之间的延迟,以毫秒为单位。

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

setInitialDelay

public void setInitialDelay(int initialDelay)
设置 Timer 的初始延迟,默认情况下与两次事件之间的延迟相同。这仅用于第一个操作事件。使用该延迟属性设置后续操作事件的间隔。

参数:
initialDelay - 调用 start 方法和由此计时器激发的第一个操作事件之间的延迟,以毫秒为单位
另请参见:
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)

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 2 Platform
Standard Ed. 5.0

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

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