所有类


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  EventListenerListlistenerList
           
 
构造方法摘要
Timer(int delay, ActionListener listener)
          创建一个每 delay 毫秒将通知其侦听器的 Timer
 
方法摘要
 voidaddActionListener(ActionListener listener)
          将一个操作侦听器添加到 Timer
protected  voidfireActionPerformed(ActionEvent e)
          通知为此事件类型的通知而注册的所有侦听器。
 ActionListener[]getActionListeners()
          返回已在此计时器上注册的所有操作侦听器的数组。
 intgetDelay()
          返回两次激发操作事件之间的延迟,以毫秒为单位。
 intgetInitialDelay()
          返回该 Timer 的初始延迟。
<T extends EventListener>
T[]
getListeners(Class<T> listenerType)
          返回目前已在此 Timer 上注册为 FooListener 的所有对象的数组。
static booleangetLogTimers()
          如果启用了日志记录,则返回 true
 booleanisCoalesce()
          如果该 Timer 组合多个挂起的操作事件,则返回 true
 booleanisRepeats()
          如果该 Timer 多次将一个操作事件发送到其侦听器,则返回 true(默认)。
 booleanisRunning()
          如果该 Timer 正在运行,则返回 true
 voidremoveActionListener(ActionListener listener)
          从 Timer 移除指定的操作侦听器。
 voidrestart()
          重新启动该 Timer,取消所有挂起的激发并使它激发其初始延迟。
 voidsetCoalesce(boolean flag)
          设置该 Timer 是否组合多个挂起的 ActionEvent 激发。
 voidsetDelay(int delay)
          设置 Timer 的延迟,两次连续的操作事件之间的毫秒数。
 voidsetInitialDelay(int initialDelay)
          设置 Timer 的初始延迟,默认情况下与两次事件之间的延迟相同。
static voidsetLogTimers(boolean flag)
          启用/禁用该计时器日志。
 voidsetRepeats(boolean flag)
          如果 flagfalse,则指示 Timer 只向其侦听器发送一次动作事件。
 voidstart()
          启动该 Timer,以使它开始向其侦听器发送操作事件。
 voidstop()
          停止该 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)