- 所有已实现的接口:
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
- 参见:
-
字段摘要
字段 -
构造方法总结
构造方法 -
方法总结
修饰符和类型方法描述voidaddActionListener(ActionListener listener) 向Timer添加一个动作监听器。protected void通知所有已注册对此事件类型的通知感兴趣的监听。返回将作为此计时器触发的ActionEvent中的操作命令传递的字符串。返回在此计时器上注册的所有动作监听的数组。intgetDelay()返回动作事件触发之间的延迟(以毫秒为单位)。int返回Timer的初始延迟。<T extends EventListener>
T[]getListeners(Class<T> listenerType) 返回当前在此Timer上注册为FooListener的所有对象的数组。static boolean如果启用日志记录,则返回true。boolean如果Timer合并多个未决操作事件,则返回true。boolean如果Timer将多次向其监听器发送动作事件,则返回true(默认值)。boolean如果Timer正在运行,则返回true。voidremoveActionListener(ActionListener listener) 从Timer中移除指定的动作监听器。voidrestart()重新启动Timer,取消任何未决的触发并使其以初始延迟触发。voidsetActionCommand(String command) 设置将作为此计时器触发的ActionEvent中的操作命令传送的字符串。voidsetCoalesce(boolean flag) 设置Timer是否合并多个未决的ActionEvent触发。voidsetDelay(int delay) 设置Timer的事件间延迟,即连续动作事件之间的毫秒数。voidsetInitialDelay(int initialDelay) 设置Timer的初始延迟,即定时器启动后在触发第一个事件之前等待的时间(以毫秒为单位)。static voidsetLogTimers(boolean flag) 启用或禁用计时器日志。voidsetRepeats(boolean flag) 如果flag是false,则指示Timer仅向其监听器发送一个动作事件。voidstart()启动Timer,使其开始向其监听器发送动作事件。voidstop()停止Timer,使其停止向其监听器发送动作事件。
-
字段详细信息
-
listenerList
注册监听集合
-
-
构造方法详细信息
-
Timer
创建一个Timer并将初始延迟和事件间延迟初始化为delay毫秒。如果delay小于或等于零,则计时器一启动就会触发。如果listener不是null,它会在计时器上注册为动作监听器。- 参数:
delay- 初始和事件间延迟的毫秒数listener- 初始监听器;可以是null- 参见:
-
-
方法详情
-
addActionListener
向Timer添加一个动作监听器。- 参数:
listener- 要添加的监听器- 参见:
-
removeActionListener
从Timer中移除指定的动作监听器。- 参数:
listener- 要删除的监听器
-
getActionListeners
返回在此计时器上注册的所有动作监听的数组。- 返回:
-
所有计时器的
ActionListeners 或一个空数组(如果当前没有注册任何动作监听器) - 自从:
- 1.4
- 参见:
-
fireActionPerformed
通知所有已注册对此事件类型的通知感兴趣的监听。- 参数:
e- 要触发的动作事件- 参见:
-
getListeners
返回当前在此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) 如果flag是false,则指示Timer仅向其监听器发送一个动作事件。- 参数:
flag- 指定false使定时器在发送第一个动作事件后停止
-
isRepeats
public boolean isRepeats()如果Timer将多次向其监听器发送动作事件,则返回true(默认值)。- 返回:
-
如果
Timer将多次向其监听器发送动作事件,则为真 - 参见:
-
setCoalesce
public void setCoalesce(boolean flag) 设置Timer是否合并多个未决的ActionEvent触发。繁忙的应用程序可能跟不上Timer的事件生成,导致多个操作事件排队。处理后,应用程序一个接一个地发送这些事件,导致Timer的监听器接收到一系列事件,它们之间没有延迟。合并通过将多个未决事件减少为单个事件来避免这种情况。Timers 默认合并事件。- 参数:
flag- 指定false关闭合并
-
isCoalesce
public boolean isCoalesce()如果Timer合并多个未决操作事件,则返回true。- 返回:
-
如果
Timer合并多个未决操作事件,则为真 - 参见:
-
setActionCommand
设置将作为此计时器触发的ActionEvent中的操作命令传送的字符串。null是可接受的值。- 参数:
command- 动作命令- 自从:
- 1.6
-
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,取消任何未决的触发并使其以初始延迟触发。
-