2.2.4 Timer类
除了EventQueue的invokeAndWait()与invokeLater()方法外,我们还可以使用Timer类来创建在事件分发线程上执行的动作。Timer提供了一种在预定义的时间之后通知ActionListener的方法。计时器可以重复通知监听吕在,或者是只通知一次。
创建计时器对象
下面是用于创建在ActionListener调用之间指定毫秒时延的Timer的构造器:
public Timer(int delay, ActionListener actionListener);
// 1 second interval
Timer timer = new Timer(1000, anActionListener);
使用计时器对象
在创建了Timer对象之后,我们需要启动start()。一旦启动了Timer,ActionListener就会在指定的时间之后得到通知。如果系统繁忙,延时会更长,但绝不会更短。
如果我们需要停止Timer,我们可以调用stop()方法。Timer同时还有一个restart()方法,这个方法会调用stop()与start(),重新启动时延间隔。
为了演示了的需要,列表2-8定义了一个只是简单的输出消息的ActionListener。然后我们创建一个Timer每半秒调用这个监听器。在我们创建计时器之后,我们需要启动这个计时器。
/**
*
*/
package swingstudy.ch02;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;
/**
* @author lenovo
*
*/
public class TimerSample {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Runnable runner = new Runnable() {
public void run() {
ActionListener actionListener = new ActionListener() {
public void actionPerformed(ActionEvent event) {
System.out.println("Hello world timer");
}
};
Timer timer = new Timer(500, actionListener);
timer.start();
}
};
EventQueue.invokeLater(runner);
}
}
Timer属性
表2-1列出Timer的六个属性。四个允许我们自定义计时器的行为。running告诉我们计时器是否启动而没有停止,而actionListeners会为我们提供动作监听器列表。
属性名
|
数据类型
|
可访问性
|
actionListeners
|
ActionListener[]
|
只读
|
coalesce
|
boolean
|
读写
|
delay
|
int
|
读写
|
initialDelay
|
int
|
读写
|
repeats
|
boolean
|
读写
|
running
|
boolean
|
只读
|
delay属性与构造函数的参数相同。如果我们改变一个运行计时器的时延,只有已存在的时延超时时才会使用新的时延。
initialDelay属性使得我们在第一次运行之后除了间隔时延以外还可以其他的启动时延。例如,如果我们在前一个小时并不希望执行一件任务,但是我们希望在之后每15分钟执行一次,我们就需要在启动计时器这前修改initialDelay设置。在默认情况下,在构造函数中initialDelay与delay属性设置为相同的设置。
repeats属性默认情况下设置为true,从而重复运行计时器。当设置为false时,计时器只通知动作监听器一次。然而我们需要重新启动restart()计显示器来再次触发监听器。非重复计时器可以用于在触发事件之后发生的一次通知。
coalesce属性允许一个繁忙的系统当已注册的ActionListener对象有新事件需要触发时丢弃还没有发生的通知。在默认情况下,coalesce的值设置为true。这就意味着如果一个计时器每500毫秒运行一次,但是系统十分繁忙且已经有2秒没有响应,计时器只需要发送一条消息,而不需要发送丢失的消息。如果这个属性设置为false,那么就需要发送四条消息。
除了所列出的属性以外,我们还可以用下面的代码来允许日志消息:
Timer.setLogTimers(true);
日志消息对于没有可视化元素的动作十分有用,使得我们知道事件的发生。
分享到:
相关推荐
关于swing组件的集合,刚刚接触这些的朋友看看,对swing组件有些了解
很多Swing经典事例,包扩各种组件、容器例子
RComponent.Swing是RComponent为java开发人员提供的表现层Swing组件集合,100%java实现。提供完整的API,帮助文档。 丰富的Demo和Demo源码。提供免费技术支持。 1.RDatePicker 输入日期数据。 2.RIpAddressField ...
Swing是AWT的扩展,它提供了更强大和更灵活的组件集合。 除了我们已经熟悉的组件如按钮、 复选框和标签外, Swing还包括许多新的组件, 如选项板、 滚动窗口、树、表格。许多一些开发人员已经熟悉的组件,如按钮,在...
Swing.js是一个轻量级的javascript组件集合,可帮助减少对肿的第三方库的需求。 它的主要目标是: 尽可能减小文件大小。 允许独立加载组件(仅加载所需的组件)。 允许以任何顺序加载组件。 支持所有现代浏览器...
Swing包含250多个类,是组件和支持类的集合。Swing提供了40多个组件,是AWT组件的四倍。除提供替代AWT重量组件的轻量组件外,Swing还提供了大量有助于开发图形用户界面的附加组件。
摇摆材料Swing的材料设计组件和实用程序的集合。
Java 界面组件案例集合 众多DEMO 适合新手和想学习java 界面开发的朋友使用
是基于集合的学生信息管理系统,因此在批量处理信息时采用集合类对象来储存,本题采用的是ArrayList。 该系统有三大功能,分别是管理员、老师、学生。 管理员除了要实现自己的登录、查看个人信息和修改教师密码以外...
3.Swing组件的灵活应用; 4.IO流的应用,读取地图文件,解析地图内容; 5.音频文件的播放,实训播放背景音乐功能; 6.java事件的应用,如ActionListener,ItemListener等事件; 7.内部类的应用。 8.绘图功能的的灵活...
3. 为了保证程序的可移植性,AWT组件集遵循最大公约数原则,即AWT只拥有所有平台上都存在的组件的公有集合。有些常用的组件不支持,比如:表、树、进度条等。字体也只能支持4种。 为什么还需要学习AWT? 实际开发中...
对几乎所有的组件全部加入了JavaBeans处理, 使OpenSwing支持可视开发. 2005/04/17 将JNumberField最大长度,小数位长度修正成符合数据库定义的规范,如:NUMBER(10,2) 2005/04/21 修改了JNumberField的参数方式及不能...
编程进行概述,阐述组件、事件、布局管理器的基本概念,然后依次对 Swing 组件、菜单、对话框、绘图等进行介绍。 第三部分(第22~27章)探究 Java API 库的部分内容,其中包括 java.lang 包和 java.util 包的大部分...
包括OOP概述、java语言概述、JAVA编程基础、类和对象、类的高级特性6、字符与字符串7、数组8、断言9、异常和垃圾收集10、内部类11、反射12、gui编程13、swing结构与布局管理器14、AWT事件模型15、swing用户界面组件...
java基础,使用一些Swing组件,线程,集合
坦克大战,简易QQ界面......P1第1讲-内容介绍....-事件处理.坦克大战3 -事件监听.坦克大战4 -事件总结.坦克大战5 -线程.坦克大战6 -线程.坦克大战7 -线程 -坦克大战8 -坦克大战9 -io编程.坦克大战10 -io编程
本书以初学者为核心,全面介绍了使用Java进行程序开发的各种...第3篇为高级篇,包括Swing基础知识、JDBC技术、Swing高级组件、GUI事件处理机制、网络程序设计;第4篇为实战篇,包括进销存管理系统、 企业内部通信系统。
这些算法包括桌面应用程序内存管理器,Swing实用程序,Swing接口转换以及许多Swing的组件扩展。 TomProject最初将提供葡萄牙语和英语组件界面。 TomProject的一些功能: TomFrame提供了已配置的框架以供一般使用...
这是一个txt文件,迅雷下载地址,复制,新建,下载就可以了 ...第8章 事件处理 第9章 Swing用户界面组件 第10章 部署应用程序和applet 第11章 异常、日志、断言和调试 第12章 泛型程序设计 第13章 集合 第14章 多线程
5) 使用迭代器遍历集合并输出集合的元素,将排序后输出的结果写入out.txt文件中,IO操作需要有异常处理; 例如:定义学生父类和不同阶段学生子类(本科生、研究生等),包含学生信息(学号、姓名、成绩或年龄等),...