模块 java.desktop

类 Timer

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

public class Timer extends Object implements Serializable
以指定的时间间隔触发一个或多个 ActionEvent s。一个示例使用是使用 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 构造的。 delay 参数用于设置初始延迟和事件触发之间的延迟,以毫秒为单位。计时器启动后,它会等待初始延迟,然后再将其第一个 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 程序员所熟悉,可以使处理事件调度线程变得更简单一些。其次,它的自动线程共享意味着您不必采取特殊步骤来避免产生太多线程。相反,您的计时器使用与使光标闪烁、工具提示出现等相同的线程。

您可以通过访问 如何使用定时器The Java Tutorial. 中的一个部分)找到更多文档和几个使用计时器的示例

Warning: 此类的序列化对象将与未来的 Swing 版本不兼容。当前的序列化支持适用于运行相同版本 Swing 的应用程序之间的短期存储或 RMI。从 1.4 开始,对所有 JavaBeans 的长期存储的支持已添加到 java.beans 包中。请参阅 XMLEncoder

自从:
1.2
参见:
  • 字段摘要

    字段
    修饰符和类型
    Field
    描述
    注册监听集合
  • 构造方法总结

    构造方法
    构造方法
    描述
    Timer(int delay, ActionListener listener)
    创建一个 Timer 并将初始延迟和事件间延迟初始化为 delay 毫秒。
  • 方法总结

    修饰符和类型
    方法
    描述
    void
    Timer 添加一个动作监听器。
    protected void
    通知所有已注册对此事件类型的通知感兴趣的监听。
    返回将作为此计时器触发的 ActionEvent 中的操作命令传递的字符串。
    返回在此计时器上注册的所有动作监听的数组。
    int
    返回动作事件触发之间的延迟(以毫秒为单位)。
    int
    返回 Timer 的初始延迟。
    <T extends EventListener>
    T[]
    getListeners(Class<T> listenerType)
    返回当前在此 Timer 上注册为 FooListener 的所有对象的数组。
    static boolean
    如果启用日志记录,则返回 true
    boolean
    如果 Timer 合并多个未决操作事件,则返回 true
    boolean
    如果 Timer 将多次向其监听器发送动作事件,则返回 true(默认值)。
    boolean
    如果 Timer 正在运行,则返回 true
    void
    Timer 中移除指定的动作监听器。
    void
    重新启动 Timer ,取消任何未决的触发并使其以初始延迟触发。
    void
    设置将作为此计时器触发的 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
    启动 Timer ,使其开始向其监听器发送动作事件。
    void
    stop()
    停止 Timer ,使其停止向其监听器发送动作事件。

    在类 java.lang.Object 中声明的方法

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • 字段详细信息

  • 构造方法详细信息

  • 方法详情

    • addActionListener

      public void addActionListener(ActionListener  listener)
      Timer 添加一个动作监听器。
      参数:
      listener - 要添加的监听器
      参见:
    • removeActionListener

      public void removeActionListener(ActionListener  listener)
      Timer 中移除指定的动作监听器。
      参数:
      listener - 要删除的监听器
    • getActionListeners

      public ActionListener [] getActionListeners()
      返回在此计时器上注册的所有动作监听的数组。
      返回:
      所有计时器的 ActionListener s 或一个空数组(如果当前没有注册任何动作监听器)
      自从:
      1.4
      参见:
    • fireActionPerformed

      protected void fireActionPerformed(ActionEvent  e)
      通知所有已注册对此事件类型的通知感兴趣的监听。
      参数:
      e - 要触发的动作事件
      参见:
    • 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
      参见:
    • setLogTimers

      public static void setLogTimers(boolean flag)
      启用或禁用计时器日志。启用后,只要计时器关闭,就会向 System.out 发送一条消息。
      参数:
      flag - true 启用日志记录
      参见:
    • getLogTimers

      public static boolean getLogTimers()
      如果启用日志记录,则返回 true
      返回:
      true 如果启用日志记录;否则,假
      参见:
    • 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)
      如果 flagfalse ,则指示 Timer 仅向其监听器发送一个动作事件。
      参数:
      flag - 指定 false 使定时器在发送第一个动作事件后停止
    • isRepeats

      public boolean isRepeats()
      如果 Timer 将多次向其监听器发送动作事件,则返回 true(默认值)。
      返回:
      如果 Timer 将多次向其监听器发送动作事件,则为真
      参见:
    • setCoalesce

      public void setCoalesce(boolean flag)
      设置 Timer 是否合并多个未决的 ActionEvent 触发。繁忙的应用程序可能跟不上 Timer 的事件生成,导致多个操作事件排队。处理后,应用程序一个接一个地发送这些事件,导致 Timer 的监听器接收到一系列事件,它们之间没有延迟。合并通过将多个未决事件减少为单个事件来避免这种情况。 Timer s 默认合并事件。
      参数:
      flag - 指定 false 关闭合并
    • isCoalesce

      public boolean isCoalesce()
      如果 Timer 合并多个未决操作事件,则返回 true
      返回:
      如果 Timer 合并多个未决操作事件,则为真
      参见:
    • setActionCommand

      public void setActionCommand(String  command)
      设置将作为此计时器触发的 ActionEvent 中的操作命令传送的字符串。 null 是可接受的值。
      参数:
      command - 动作命令
      自从:
      1.6
    • getActionCommand

      public String  getActionCommand()
      返回将作为此计时器触发的 ActionEvent 中的操作命令传递的字符串。可能是 null ,这也是默认值。
      返回:
      触发事件中使用的动作命令
      自从:
      1.6
    • start

      public void start()
      启动 Timer ,使其开始向其监听器发送动作事件。
      参见:
    • isRunning

      public boolean isRunning()
      如果 Timer 正在运行,则返回 true
      返回:
      如果 Timer 正在运行,则为 true,否则为 false
      参见:
    • stop

      public void stop()
      停止 Timer ,使其停止向其监听器发送动作事件。
      参见:
    • restart

      public void restart()
      重新启动 Timer ,取消任何未决的触发并使其以初始延迟触发。