使用Timer为界面执行异步任务
-------------------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 TestTimer extends JFrame { private JPanel contentPane;
int value=0; /** * Launch the application. */ public static EventQueue.invokeLater(new Runnable() { public 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% 毫秒=1秒) */ btnRun.addMouseListener(new MouseAdapter() { @Override public /** * 创建一个 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 public value+=10; progressBar.setValue(value); 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】
最新文章
- PC分配盘符的时候发现==》RPC盘符不可用
- 软件代码生成之Codesmith模板.netTiers
- linux shell 报错 Syntax error: Bad for loop variable
- 【GOF23设计模式】装饰模式
- Another mysql daemon already running with the same unix socket
- Why Does Everyone Else Appear to Be Succeeding?
- PAT (Basic Level) 1004. 成绩排名 (20)
- 功能间(两个form)数据交互的编程方法
- ftk学习记(对话框篇)
- 为什么重写equals时必须重写hashCode方法?(转发+整理)
- Ionic 常用组件解析
- PHP防止SQL注入和XSS攻击
- 检测dll是32/64位 ?
- SpringMVC_第一个程序
- salesforce零基础学习(八十七)Apex 中Picklist类型通过Control 字段值获取Dependent List 值
- docker简单介绍---部署私有docker仓库Registry
- 【mysql】模糊查询的使用
- C#实现加简单的Http请求
- ubuntu 14.04安装zabbix3.0以及汉化
- MySQL 5.6学习笔记(数据类型)
热门文章
- swift ! 和 ? 的学习
- Python partial function 偏函数
- [原创]java WEB学习笔记24:MVC案例完整实践(part 5)---删除操作的设计与实现
- iframe弹出层中关闭包含iframe的div(子页面调用父页面js函数)
- C#子线程执行完后通知主线程
- UI层自动化测试介绍
- Oracle--存储过程和自定义函数
- Debian for ARM
- freeMarker(八)——程序开发指南之配置(Configuration)
- ACM学习历程—HDU5586 Sum(动态规划)(BestCoder Round #64 (div.2) 1002)