使用Timer为界面执行异步任务

来源:互联网 发布:视频剪裁软件 编辑:程序博客网 时间:2024/06/04 01:19

-------------------siwuxie095

  

  

  

  

  

  

工程名:TestSwingTimer

包名:com.siwuxie095.timer

类名:TestTimer.java

  

  

工程结构目录如下:

  

  

  

  

  

代码:

  

package com.siwuxie095.timer;

  

import java.awt.BorderLayout;

import java.awt.EventQueue;

  

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.border.EmptyBorder;

  

import com.sun.java.swing.plaf.windows.WindowsLookAndFeel;

  

import javax.swing.JProgressBar;

import javax.swing.Timer;

import javax.swing.UIManager;

import javax.swing.UnsupportedLookAndFeelException;

import javax.swing.JButton;

  

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

  

public class TestTimerextends JFrame {

  

private JPanel contentPane;

 

//定义 value,初始值为 0

int value=0;

  

/**

* Launch the application.

*/

public staticvoid main(String[] args) {

EventQueue.invokeLater(new Runnable() {

publicvoid run() {

try {

TestTimer frame =new TestTimer();

frame.setVisible(true);

}catch (Exception e) {

e.printStackTrace();

}

}

});

}

  

/**

* Create the frame.

*/

public TestTimer() {

 

try {

UIManager.setLookAndFeel(new WindowsLookAndFeel());

}catch (UnsupportedLookAndFeelException e1) {

e1.printStackTrace();

}

 

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setBounds(100,100, 450,300);

contentPane =new JPanel();

contentPane.setBorder(new EmptyBorder(5,5, 5,5));

contentPane.setLayout(new BorderLayout(0,0));

setContentPane(contentPane);

 

JProgressBar progressBar =new JProgressBar();

contentPane.add(progressBar, BorderLayout.NORTH);

 

JButton btnRun =new JButton("Run");

btnRun.setFocusable(false);

 

/**

*为按钮 Run添加 mouseClicked事件

*鼠标单击按钮Run后,进度条每隔 1 秒增加 10%

* 10秒钟后,增加到 100% (注:1000毫秒=1)

*/

btnRun.addMouseListener(new MouseAdapter() {

@Override

publicvoid mouseClicked(MouseEvent e) {

/**

*创建一个 Timer,注意:是 javax.swing 包中的 Timer

*构造方法需要传入两个参数:

*第一个 delay延时,以毫秒计,且 timer所触发的动作需要经过延时才会触发

*第二个 listener监听器,传入匿名对象 new ActionListener()

*/

Timer timer=new Timer(1000,new ActionListener() {

 

/**

*当前 timer所对应的操作都是在 actionPerformed()中执行

*

*当前 timer actionPerformed()方法一旦被触发,将自动被派发给UI线程,

*放到UI线程的执行队列中去执行,所以这里面的操作都可以针对当前的UI元素来

*进行属性的设定,所有操作都是UI线程安全的

*/

 

@Override

publicvoid actionPerformed(ActionEvent e) {

value+=10;

progressBar.setValue(value);

//进度条读满后,重置为 0

if (value==100) {

value=0;

}

}

});

 

//将该timer设定为循环执行

timer.setRepeats(true);

//开启timer

timer.start();

 

}

});

contentPane.add(btnRun, BorderLayout.SOUTH);

}

  

}

  

  

  

将窗体JFrame 的 LookAndFeel 设定为 Windows

  

  

在根面板 contentPane 的上方添加一个 JProgressBar,

下方添加一个JButton

  

  

将 JButton 的文本(text)改为 Run,并 Rename 为 btnRun,

将 focusable 属性设为 false

  

  

为 JButton 添加 mouseClicked 事件,鼠标单击 Run 按钮后,

进度条每隔 1 秒增加 10%,10 秒钟后,增加到 100%,循环

  

  

  

  

运行程序:

  

  

  

  

  

  

  

【made by siwuxie095】

0 0
原创粉丝点击