Module java.desktop
Package javax.swing

Class Timer

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

public class Timer extends Object implements Serializable
在指定的时间间隔内触发一个或多个ActionEvent。一个示例用途是一个动画对象,它使用Timer作为绘制帧的触发器。

设置定时器涉及创建一个Timer对象,在其上注册一个或多个动作监听器,并使用start方法启动定时器。例如,以下代码创建并启动一个定时器,每秒触发一个动作事件(由Timer构造函数的第一个参数指定)。Timer构造函数的第二个参数指定一个监听器,用于接收定时器的动作事件。

  int delay = 1000; //毫秒
  ActionListener taskPerformer = new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
          //...执行任务...
      }
  };
  new Timer(delay, taskPerformer).start();

Timer通过指定延迟参数和一个ActionListener>来构造。延迟参数用于设置初始延迟和事件触发之间的延迟,单位为毫秒。一旦定时器启动,它会在第一次事件触发之前等待初始延迟,然后继续在每次事件间隔经过后触发事件,直到停止。

在构造后,初始延迟和事件间隔可以独立更改,并且可以添加额外的ActionListeners

如果希望定时器仅在第一次触发后停止,请在定时器上调用setRepeats(false)

尽管所有Timer都使用单个共享线程执行等待(由执行的第一个Timer对象创建),但Timer的动作事件处理程序在另一个线程上执行 -- 事件分派线程。这意味着Timer的动作处理程序可以安全地在Swing组件上执行操作。但是,这也意味着处理程序必须快速执行,以保持GUI的响应性。

在v 1.3中,Java平台添加了另一个Timer类:java.util.Timer。它和javax.swing.Timer提供相同的基本功能,但java.util.Timer更通用,功能更多。javax.swing.Timer有两个功能,可以使其在GUI中更容易使用。首先,它的事件处理隐喻对GUI程序员来说很熟悉,可以使处理事件分派线程变得更简单。其次,其自动线程共享意味着您无需采取特殊步骤来避免生成过多线程。相反,您的定时器使用与使光标闪烁、工具提示出现等相同的线程。

您可以通过访问如何使用定时器中的部分,在Java教程中找到更多文档和使用定时器的示例。

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

自版本:
1.2
参见:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected EventListenerList
    注册的监听器集合
  • Constructor Summary

    Constructors
    Constructor
    Description
    Timer(int delay, ActionListener listener)
    创建一个Timer,并将初始延迟和事件之间的延迟都初始化为delay毫秒。
  • Method Summary

    Modifier and Type
    Method
    Description
    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
    start()
    启动Timer,导致它开始向其监听器发送动作事件。
    void
    stop()
    停止Timer,导致它停止向其监听器发送动作事件。

    Methods declared in class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

  • Constructor Details

  • Method Details

    • addActionListener

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

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

      public ActionListener[] getActionListeners()
      返回在此定时器上注册的所有动作监听器的数组。
      返回:
      所有定时器的ActionListener或如果当前未注册任何动作监听器,则返回空数组
      自版本:
      1.4
      参见:
    • fireActionPerformed

      protected void fireActionPerformed(ActionEvent e)
      通知所有已注册对此事件类型感兴趣的监听器。
      参数:
      e - 要触发的动作事件
      参见:
    • getListeners

      public <T extends EventListener> T[] getListeners(Class<T> listenerType)
      返回当前在此Timer上注册为FooListener的所有对象的数组。使用addFooListener方法注册FooListener

      您可以使用类字面量(例如FooListener.class)指定listenerType参数。例如,您可以使用以下代码查询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; 否则返回false
      参见:
    • 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()
      返回true(默认值),如果Timer将向其侦听器多次发送动作事件。
      返回:
      如果Timer将向其侦听器多次发送动作事件,则返回true
      参见:
    • setCoalesce

      public void setCoalesce(boolean flag)
      设置Timer是否合并多个待处理的ActionEvent触发。繁忙的应用程序可能无法跟上Timer的事件生成,导致多个动作事件被排队。在处理时,应用程序会依次发送这些事件,导致Timer的侦听器接收到一系列没有延迟的事件。合并避免了这种情况,将多个待处理事件减少为单个事件。默认情况下,Timer会合并事件。
      参数:
      flag - 指定false以关闭合并
    • isCoalesce

      public boolean isCoalesce()
      返回true如果Timer合并多个待处理的动作事件。
      返回:
      如果Timer合并多个待处理的动作事件,则返回true
      参见:
    • setActionCommand

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

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

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

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

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

      public void restart()
      重新启动Timer,取消任何待处理的事件,并使其以初始延迟时间触发。