swing的事件处理机制,swing事件处理的过程中涉及哪些对象
定时器类
除了EventQueue的invokeAndWait()和invokeLater()方法,我们还可以使用Timer类来创建要在事件分发线程上执行的操作。Timer提供了一种在预定义时间后通知ActionListener的方法。计时器可以重复通知监视器卢仔,或者只通知一次。
创建计时器对象
以下是用于创建计时器的构造函数,该计时器指定ActionListener调用之间的毫秒延迟:
public Timer(int delay,action listener action listener);
//1秒间隔
Timer timer=new Timer(1000,anActionListener);
使用计时器对象
创建计时器对象后,我们需要启动start()。一旦计时器启动,ActionListener将在指定时间后收到通知。如果系统繁忙,延迟会更长,但绝不会更短。
如果我们需要停止计时器,我们可以调用stop()方法。Timer还有一个restart()方法,调用stop()和start()来重新启动延迟间隔。
为了演示的需要,清单2-8定义了一个ActionListener,它只输出消息。然后我们创建一个计时器,每半秒钟调用一次这个监听器。创建计时器后,我们需要启动这个计时器。
/**
包swingstudy.ch02
导入Java . awt . event queue;
导入Java . awt . event . action event;
导入Java . awt . event . action listener;
导入javax . swing . timer;
* @作者联想
公共类TimerSample {
* @param args
公共静态void main(String[] args) {
//TODO自动生成的方法存根
Runnable runner=new Runnable() {
公共无效运行(){
action listener action listener=new action listener(){
public void action performed(action event事件){
system . out . println(“Hello world timer”);
Timer timer=new Timer(500,action listener);
timer . start();
event queue . invoke later(runner);
}
计时器属性
表2-1列出了定时器的六个属性。允许我们定制计时器的四种行为。运行告诉我们计时器是否启动但没有停止,actionListeners将为我们提供一个动作侦听器列表。
delay属性与构造函数的参数相同。如果我们改变正在运行的计时器的时间延迟,新的时间延迟将仅在现有时间延迟超时时使用。
initialDelay属性使我们在第一次运行后,除了间隔延迟之外,还有其他启动延迟。例如,如果我们不想在前一个小时执行一个任务,但是我们想在之后每隔15分钟执行一次,我们需要在启动计时器之前修改initialDelay设置。默认情况下,initialdelay和delay属性在构造函数中设置为相同的设置。
默认情况下,repeats属性设置为true,以便计时器重复运行。当设置为false时,计时器只通知操作监听器一次。但是,我们需要重新启动restart()指示器显示来再次触发监听器。非重复定时器可以用于在触发事件之后发生的通知。
当注册的ActionListener对象有新事件要触发时,蔻驰属性允许繁忙的系统丢弃尚未发生的通知。默认情况下,coalesce的值设置为true。这意味着,如果一个定时器每500毫秒运行一次,但系统非常繁忙,2秒钟没有响应,那么定时器只需要发送一条消息,而不是发送丢失的消息。如果该属性设置为false,则需要发送四条消息。
除了列出的属性,我们还可以使用以下代码来允许日志消息:
timer . setlogtimers(true);