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
。 延迟参数用于设置事件触发之间的初始延迟和延迟(以毫秒为单位)。 一旦定时器启动,它将等待初始延迟,然后再将其第一个ActionEvent
发送到注册的监听器。 在这个第一个事件之后,它会在每次事件间延迟过去之后继续发生事件,直到它停止。
施工后,初始延迟和事件间延迟可以独立更改, ActionListeners
可以增加ActionListeners
。
如果你想让定时器第一次触发然后停止,调用setRepeats(false)
上的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程序员熟悉的,可以使处理事件调度线程更简单一些。 其次,它的自动线程共享意味着你不必采取特殊的步骤来避免产生太多的线程。 相反,您的计时器使用与使光标闪烁相同的线程,显示工具提示等。
有关使用定时器的更多文档和几个示例,请访问Java教程中的 How to Use Timers 。 有关更多示例和帮助,选择此Timer
类和java.util.Timer
,请参阅Using Timers in Swing Applications , Swing连接中的一篇文章。
警告:此类的序列化对象与将来的Swing版本不兼容。 当前的序列化支持适用于运行相同版本的Swing的应用程序之间的短期存储或RMI。 从1.4开始,对所有JavaBeans的长期存储的支持已经添加到java.beans
包中。 请参阅XMLEncoder
。
java.util.Timer
Modifier and Type | Field and Description |
---|---|
protected EventListenerList |
listenerList |
Constructor and Description |
---|
Timer(int delay, ActionListener listener)
创建一个
Timer ,并将初始延迟和事件间延迟
delay 为
delay 毫秒。
|
Modifier and Type | Method and Description |
---|---|
void |
addActionListener(ActionListener listener)
在
Timer 添加一个动作侦听器。
|
protected void |
fireActionPerformed(ActionEvent e)
通知所有在此事件类型上通知有兴趣的听众。
|
String |
getActionCommand()
返回将交付作为动作命令字符串
ActionEvent 此计时器所触发秒。
|
ActionListener[] |
getActionListeners()
返回在此定时器上注册的所有动作侦听器的数组。
|
int |
getDelay()
返回动作事件触发之间的延迟(以毫秒为单位)。
|
int |
getInitialDelay()
返回
Timer 的初始延迟。
|
<T extends EventListener> |
getListeners(类<T> listenerType)
返回当前注册的所有对象的数组
FooListener 在这个S
Timer 。
|
static boolean |
getLogTimers()
如果启用日志记录,则返回
true 。
|
boolean |
isCoalesce()
如果
Timer 合并多个待处理的动作事件,则返回
true 。
|
boolean |
isRepeats()
返回
true (默认值),如果
Timer 将多次向其侦听器发送一个动作事件。
|
boolean |
isRunning()
如果
Timer 正在运行,则返回
true 。
|
void |
removeActionListener(ActionListener listener)
将删除指定的动作监听
Timer 。
|
void |
restart()
重新启动
Timer ,取消任何待处理的启动,并使其最初延迟启动。
|
void |
setActionCommand(String command)
设置将交付作为动作命令字符串
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)
如果
flag 是
false ,则
Timer 仅
Timer 器发送一个动作事件。
|
void |
start()
启动
Timer ,使其开始向其监听器发送动作事件。
|
void |
stop()
停止
Timer ,使其停止向其监听器发送操作事件。
|
protected EventListenerList listenerList
public Timer(int delay, ActionListener listener)
Timer
并将初始延迟和事件间延迟delay
为delay
毫秒。
如果delay
小于或等于零,定时器在启动时立即触发。
如果listener
不是null
,则在定时器上注册为动作侦听器。
delay
- 初始事件延迟和事件间延迟的毫秒数
listener
- 初始听众;
可以null
addActionListener(java.awt.event.ActionListener)
,
setInitialDelay(int)
,
setRepeats(boolean)
public void addActionListener(ActionListener listener)
Timer
添加一个动作侦听器。
listener
- 要添加的侦听器
Timer(int, java.awt.event.ActionListener)
public void removeActionListener(ActionListener listener)
Timer
。
listener
- 要删除的侦听器
public ActionListener[] getActionListeners()
ActionListener
s或一个空数组,如果没有动作侦听器当前注册
addActionListener(java.awt.event.ActionListener)
,
removeActionListener(java.awt.event.ActionListener)
protected void fireActionPerformed(ActionEvent e)
e
- 发生的动作事件
EventListenerList
public <T extends EventListener> T[] getListeners(类<T> listenerType)
FooListener
的所有对象的数组,这个Timer
。
FooListener
使用addFooListener
。
您可以使用类文字指定listenerType
参数,例如FooListener.class
。 例如,您可以使用以下代码查询其操作侦听器的Timer
实例t
:
ActionListener[] als = (ActionListener[])(t.getListeners(ActionListener.class));
如果没有这样的侦听器存在,这个方法返回一个空数组。
listenerType
- 所请求的听众的类型;
此参数应指定从java.util.EventListener
下降的java.util.EventListener
FooListener
的所有对象的数组,如果没有添加此类侦听器,则为空数组
ClassCastException
- 如果
listenerType
没有指定实现java.util.EventListener的类或
java.util.EventListener
getActionListeners()
,
addActionListener(java.awt.event.ActionListener)
,
removeActionListener(java.awt.event.ActionListener)
public static void setLogTimers(boolean flag)
System.out
。
flag
-
true
以启用日志记录
getLogTimers()
public static boolean getLogTimers()
true
。
true
如果启用日志记录;
否则,假
setLogTimers(boolean)
public void setDelay(int delay)
Timer
的事件间延迟,连续动作事件之间的毫秒数。
这不影响初始延迟属性,可以通过setInitialDelay
方法设置。
delay
- 以毫秒为单位的延迟
setInitialDelay(int)
public int getDelay()
setDelay(int)
,
getInitialDelay()
public void setInitialDelay(int initialDelay)
Timer
的初始延迟,在触发第一个事件之前定时器启动后等待的时间(以毫秒为单位)。
在构造时,这被设置为与事件间延迟相同,但是其值是独立的,并且不受事件延迟之间的改变的影响。
initialDelay
- 初始延迟(以毫秒为单位)
setDelay(int)
public int getInitialDelay()
Timer
的初始延迟。
setInitialDelay(int)
,
setDelay(int)
public void setRepeats(boolean flag)
flag
是
false
,则
Timer
只
Timer
器发送一个动作事件。
flag
- 指定
false
使定时器在发送第一个动作事件后停止
public boolean isRepeats()
true
(默认值),如果
Timer
将多次向其侦听器发送一个动作事件。
setRepeats(boolean)
public void setCoalesce(boolean flag)
Timer
是否合并多个待处理的ActionEvent
。
繁忙的应用程序可能无法跟上Timer
的事件生成,导致多个操作事件排队。
处理后,应用程序一个接一个地发送这些事件,导致Timer
的侦听器在它们之间没有任何延迟地接收一系列事件。
合并通过将多个未决事件减少为单个事件来避免这种情况。
Timer
s默认合并事件。
flag
-指定
false
关闭合并
public boolean isCoalesce()
Timer
合并多个待处理的动作事件,则返回
true
。
setCoalesce(boolean)
public void setActionCommand(String command)
ActionEvent
此计时器所触发秒。
null
是可接受的值。
command
- action命令
public String getActionCommand()
ActionEvent
此计时器所触发秒。
可能是null
,也是默认值。
public void start()
Timer
,使其开始向其监听器发送动作事件。
stop()
public boolean isRunning()
Timer
正在运行,则返回
true
。
start()
public void stop()
Timer
,使其停止向其监听器发送操作事件。
start()
public void restart()
Timer
,取消任何未决的发射,并使其以其初始延迟触发。