java-swing-高级组件初步-计时器(timer)

今天看了一下 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);   //设置可见
	}
}

最后的运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值