Java Swing Timer:计时器组件

1 Java Swing Timer:计时器组件

计时器(Timer)组件可以在指定时间间隔触发一个或多个 ActionEvent。设置计时器的过程包括创建一个 Timer 对象,在该对象上注册一个或多个动作侦听器,以及使用 start() 方法启动该计时器。
例如,以下代码创建并启动一个每秒(该时间由 Timer 构造方法的第一个参数指定)触发一次动作事件的计时器。Timer 构造方法的第二个参数指定接收计时器动作事件的监听器。

int delay=1000;    //时间间隔,单位为毫秒
ActionListener taskPerformer=new ActionListener()
{
    public void afrfcionPerformed(ActionEvent evt)
    {
        //具体的任务
    }
};
new Timer(delay,taskPerformer).start();

创建 Timer 类时要指定一个延迟参数和一个 ActionListener。延迟参数用于设置初始延迟和事件触发之间的延迟(以毫秒为单位)。启动计时器后,它将在向已注册监听器触发第一个 ActionEvent 之前等待初始延迟。第一个事件之后,每次超过事件间延迟时它都继续触发事件,直到被停止。
创建 Timer 类之后,可以单独更改初始延迟和事件间延迟,并且可以添加其他 ActionListener。如果希望计时器只在第一次时触发然后停止,可以对计时器调用 setRepeats(false)。

2 常用方法

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,使它停止向其监听器发送动作事件

3 示例:模拟软件安装过程中显示安装进度信息的进度条

import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class JProgressBarDemo implements ActionListener,ChangeListener  {

    JFrame frame=null;
    JProgressBar progressbar;
    JLabel label;
    Timer timer;
    JButton b;
    public static void main(String[] agrs) {
        new JProgressBarDemo();    //创建一个实例化对象
    }

    public JProgressBarDemo() {
        frame=new JFrame("软件安装");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Container contentPane=frame.getContentPane();
        label=new JLabel(" ",JLabel.CENTER);    //创建显示进度信息的文本标签
        progressbar=new JProgressBar();    //创建一个进度条
        progressbar.setOrientation(JProgressBar.HORIZONTAL);
        progressbar.setMinimum(0);
        progressbar.setMaximum(100);
        progressbar.setValue(0);
        progressbar.setStringPainted(true);
        progressbar.addChangeListener(this);    //添加事件监听器
        //设置进度条的几何形状
        progressbar.setPreferredSize(new Dimension(300,20));
        progressbar.setBorderPainted(true);
        progressbar.setBackground(Color.pink);
        //添加启动按钮
        JPanel panel=new JPanel();
        b=new JButton("安装");
        b.setForeground(Color.blue);
        //添加事件监听器
        b.addActionListener(this);
        panel.add(b);
        timer=new Timer(100, this);    //创建一个计时器,计时间隔为100毫秒
        //把组件添加到frame中
        contentPane.add(panel,BorderLayout.NORTH);
        contentPane.add(progressbar,BorderLayout.CENTER);
        contentPane.add(label,BorderLayout.SOUTH);
        frame.pack();
        frame.setVisible(true);
    }

    //实现事件监听器接口中的方法
    public void actionPerformed(ActionEvent e) {
        if(e.getSource()==b)
            timer.start();
        if(e.getSource()==timer) {
            int value=progressbar.getValue();
            if(value<100) {
                progressbar.setValue(++value);
            }
            else {
                timer.stop();
                frame.dispose();
            }
        }
    }

    public void stateChanged(ChangeEvent e1) {    //实现事件监听器接口中的方法{
        int value=progressbar.getValue();
        if(e1.getSource()==progressbar){
            label.setText("目前已完成进度:"+Integer.toString(value)+" %");
            label.setForeground(Color.blue);
        }
    }

}

4 运行效果

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

书香水墨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值