今天看了一下 Timer类 ,大概了解了其用法,就是不断重复响应动作事件,两次事件之间响应的时间差间隔是一样的。
先看一下它的一个构造方法来进行解释:
public Timer(long delay,Listener l)
第一个参数是设置 两次事件响应的时间间隔,第二个参数是,需要重复响应的事件(监听者)。
另外,在创建一个Timer对象后,可以单独重新设置延迟间隔(两次事件响应之间时间差),也可以添加其他的(事件)监听者。
下面是它的一些方法:
方法名称 | 说明 |
addActionListener(ActionListener 1) | 将一个动作监听器添加到 Timer |
getDelay() | 返回两次触发动作事件间延迟,以毫秒为单位 |
isCoalesce() | 如果 Timer 组合多个挂起的动作事件,则返回 true |
isRunning() | 如果 Timer 正在运行,则返回 true |
restart() | 重新启动 Timer,取消所有挂起的触发并使它按初始延迟触发 |
setCoalesce(boolean flag) | 设置 Timer 是否组合多个挂起的 ActionEvent |
setDelay(int delay) | 设置 Timer 的事件间延迟,两次连续的动作事件之间的毫秒数 |
setLogTimers(boolean flag) | 启用/禁用计时器日志 |
setRepeats(boolean flag) | 如果 flag 为 false,则指示 Timer 只向其监听器发送一次动作事件 |
start() | 启动 Timer,使它开始向其监听器发送动作事件 |
stop() | 停止 Timer,使它停止向其监听器发送动作事件 |
在前面写进度条的一篇中,进度条动态的实现是使用的for循环来完成的,现在,使用Timer类创建的计时器组件,通过不断重复响应事件,完成进度条的动态的实现。
需要导入的类:
import javax.swing.Timer;
//在这里,还需要导入一个事件监听类
import java.awt.event.ActionEvent; //动作事件用于响应按钮
import java.awt.event.ActionListener;
创建进度条:
JProgressBar jprogressBar1 = new JProgressBar(0,100); //创建进度条
下面是重点:
创建动作事件监听者类,继承ActionListener接口,重写actionPerformed方法
class myactionlistener implements ActionListener
{
//创建一个计时器,时间间隔50毫秒,添加当前的动作事件监听者 myactionlistener类
Timer timer1 = new Timer(50,this);
@Override
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == jbutton1) //在完整代码中创建的一个按钮,当点击这个按钮时,就启动计时器
{
timer1.start(); //启动计时器
}
int value = jprogressBar1.getValue(); //获取进度条当前值
if(value < 100)
{
jprogressBar1.setValue(++value); //更新值,让值+1
}
else
{
timer1.stop(); //如果进度条的值到了100,就停止计时器
}
}
}
下面是完整的代码:
import javax.swing.JFrame; //窗口
import javax.swing.JPanel; //中间容器
import javax.swing.JButton; //按钮
import java.awt.event.ActionEvent;//动作事件
import java.awt.event.ActionListener;
import javax.swing.JProgressBar; //进度条
import javax.swing.Timer; //计时器
public class text_Timer
{
public static void main(String[] args)
{
JFrame jframe = new JFrame("计时器");//窗口
JPanel jpanel1 = new JPanel(); //面板
JButton jbutton1 = new JButton("开始"); //按钮
JProgressBar jprogressBar1 = new JProgressBar(); //进度条
//创建动作监听者类
class myactionlistener implements ActionListener
{
Timer timer1 = new Timer(50,this);
@Override
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == jbutton1)
{
timer1.start();
}
int value = jprogressBar1.getValue();
if(value < 100)
{
jprogressBar1.setValue(++value);
}
else
{
timer1.stop();
}
}
}
jbutton1.addActionListener(new myactionlistener());//按钮添加监听者
jframe.setSize(250, 150); //设置窗口大小
//添加
jpanel1.add(jbutton1);
jpanel1.add(jprogressBar1);
jframe.add(jpanel1);
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭时操作
jframe.setVisible(true); //设置可见
}
}
最后的运行结果: