Module  java.desktop
软件包  javax.swing

Class Timer

  • All Implemented Interfaces:
    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(); 

    通过指定延迟参数和Timers来构造ActionListener 延迟参数用于设置事件触发之间的初始延迟和延迟(以毫秒为单位)。 一旦定时器启动,它将等待初始延迟,然后再将其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程序员熟悉的,可以使处理事件调度线程更简单一些。 其次,它的自动线程共享意味着你不必采取特殊的步骤来避免产生太多的线程。 相反,您的计时器使用与使光标闪烁相同的线程,显示工具提示等。

    您可以通过访问How to Use Timers (Java教程中的一节)找到更多文档和使用计时器的几个示例 有关更多示例和帮助,选择此Timer类和java.util.Timer ,请参阅Using Timers in Swing ApplicationsSwing连接中的一篇文章

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

    从以下版本开始:
    1.2
    另请参见:
    TimerSerialized Form
    • 构造方法摘要

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

      所有方法  静态方法  接口方法  具体的方法 
      Modifier and Type 方法 描述
      void addActionListener​(ActionListener listener)
      Timer添加一个动作侦听 Timer
      protected void fireActionPerformed​(ActionEvent e)
      通知所有在此事件类型上通知有兴趣的听众。
      String getActionCommand​()
      返回将由此定时器触发的 ActionEvent s中的action命令传递的字符串。
      ActionListener[] getActionListeners​()
      返回在此定时器上注册的所有动作侦听器的数组。
      int getDelay​()
      返回动作事件触发之间的延迟(以毫秒为单位)。
      int getInitialDelay​()
      返回 Timer的初始延迟。
      <T extends EventListener>
      T[]
      getListeners​(Class<T> listenerType)
      返回当前注册为 FooListener的所有对象的数组,此 Timer
      static boolean getLogTimers​()
      如果启用日志记录,则返回 true
      boolean isCoalesce​()
      如果 Timer合并了多个待处理的动作事件,则返回 true
      boolean isRepeats​()
      返回 true (默认),如果 Timer将多次向其侦听器发送一个动作事件。
      boolean isRunning​()
      如果 Timer正在运行,则返回 true
      void removeActionListener​(ActionListener listener)
      Timer删除指定的动作侦听 Timer
      void restart​()
      重新启动 Timer ,取消任何未决的发射,并使其以其初始延迟触发。
      void setActionCommand​(String command)
      将此定时器触发的 ActionEvent的action命令设置为要传递的字符串。
      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 ,导致它停止向其监听器发送动作事件。
    • 构造方法详细信息

    • 方法详细信息

      • removeActionListener

        public void removeActionListener​(ActionListener listener)
        Timer删除指定的动作侦听 Timer
        参数
        listener - 要删除的侦听器
      • fireActionPerformed

        protected void fireActionPerformed​(ActionEvent e)
        通知所有在此事件类型上通知有兴趣的听众。
        参数
        e - 要触发的动作事件
        另请参见:
        EventListenerList
      • 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
        另请参见:
        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如果启用日志记录; 否则,假
        另请参见:
        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的初始延迟。
        结果
        Timer的初始延迟,以毫秒为单位
        另请参见:
        setInitialDelay(int)setDelay(int)
      • setRepeats

        public void setRepeats​(boolean flag)
        如果 flagfalse ,则指示 Timer只向其侦听器发送一个操作事件。
        参数
        flag - 指定 false ,使定时器在发送第一个动作事件后停止
      • isRepeats

        public boolean isRepeats​()
        返回 true (默认),如果 Timer将多次向其侦听器发送操作事件。
        结果
        如果 Timer将多次向其侦听器发送一个动作事件, Timer true
        另请参见:
        setRepeats(boolean)
      • setCoalesce

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

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

        public void setActionCommand​(String command)
        将此定时器触发的ActionEvent的动作命令设置为要传递的字符串。 null是可接受的值。
        参数
        command - 动作命令
        从以下版本开始:
        1.6
      • getActionCommand

        public String getActionCommand​()
        返回将由此定时器触发的ActionEvent的action命令发送的字符串。 可能是null ,也是默认值。
        结果
        用于触发事件的动作命令
        从以下版本开始:
        1.6
      • start

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

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

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

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