swing的事件处理机制,swing事件处理的过程中涉及哪些对象

  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);

swing的事件处理机制,swing事件处理的过程中涉及哪些对象