本文实例讲述了java swing组件实现进度监视功能。分享给大家供大家参考,具体如下:
实例一:
?
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
import java.awt.event.actionevent;
import java.awt.event.actionlistener;
import javax.swing.progressmonitor;
import javax.swing.timer;
public class testprogressmonitor {
timer timer;
public void init() {
final simulatedtargetmi target = new simulatedtargetmi(1000);
// 以启动一条线程的方式来执行一个耗时的任务
final thread targetthread = new thread(target);
targetthread.start();
// 创建进度对话框
final progressmonitor dialog = new progressmonitor(null,
"等待任务完成,任务完成之前请不要关闭窗口,否则将取消当前操作...", "已完成:0.00%", 0,
target.getamount());
// 创建一个计时器
timer = new timer(300, new actionlistener() {
public void actionperformed(actionevent e) {
// 以任务的当前完成量设置进度对话框的完成比例
dialog.setprogress(target.getcurrent());
dialog.setnote("已完成:" + target.getpercent());
// 如果用户单击了进度对话框的”取消“按钮
if (dialog.iscanceled()) {
// 停止计时器
timer.stop();
// 中断任务的执行线程
targetthread.interrupt();
// 系统退出
system.exit(0);
}
}
});
timer.start();
}
public static void main(string[] args) {
new testprogressmonitor().init();
}
}
// 模拟一个耗时的任务
class simulatedtargetmi implements runnable {
// 任务的当前完成量
private volatile int current;
// 总任务量
private int amount;
public simulatedtargetmi(int amount) {
current = 0;
this.amount = amount;
}
public int getamount() {
return amount;
}
public int getcurrent() {
return current;
}
// run方法代表不断完成任务的过程
public void run() {
while (current < amount) {
try {
thread.sleep(50);
} catch (interruptedexception e) {
}
current++;
}
}
public string getpercent() {
return string.format("%.2f", 100.0 * current / amount) + "%";
}
}
|
运行效果:
实例二:
?
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
import java.awt.flowlayout;
import java.awt.font;
import java.awt.event.actionevent;
import java.awt.event.actionlistener;
import java.awt.event.windowadapter;
import java.awt.event.windowevent;
import javax.swing.box;
import javax.swing.boxlayout;
import javax.swing.jframe;
import javax.swing.jlabel;
import javax.swing.jpanel;
import javax.swing.jprogressbar;
import javax.swing.timer;
public class testjprogressbar {
jframe frame = new jframe("www.zzvips.com - 当前进度指示...");
// 创建一条垂直进度条
jprogressbar bar = new jprogressbar(jprogressbar.horizontal);
jlabel tiplabel = new jlabel("提示:", jlabel.left);
jlabel contentlabel = new jlabel("任务完成之前请不要关闭窗口,否则将取消当前操作...", jlabel.left);
jlabel statuslabel = new jlabel(" ", jlabel.center);
public void init() {
frame.setlayout(new flowlayout());
frame.setresizable(false);
tiplabel.setfont(new font("serif", font.plain, 14));
contentlabel.setfont(new font("serif", font.plain, 14));
statuslabel.setfont(new font("serif", font.plain, 14));
jpanel panel = new jpanel();
// fr5.setborder(new titledborder("boxlayout - y"));
panel.setlayout(new boxlayout(panel, boxlayout.y_axis));
panel.add(tiplabel);
panel.add(box.createverticalstrut(2));
panel.add(contentlabel);
panel.add(box.createverticalstrut(7));
panel.add(bar);
// panel.add(box.createverticalglue());
panel.add(box.createverticalstrut(2));
panel.add(statuslabel);
frame.add(panel, 0);
final simulatedtarget target = new simulatedtarget(1000);
// 以启动一条线程的方式来执行一个耗时的任务
final thread thread = new thread(target);
thread.start();
// 设置在进度条中绘制完成百分比
bar.setstringpainted(true);
// bar.setpreferredsize(new dimension(100, 18));
// 设置进度条的最大值和最小值,
bar.setminimum(0);
// 以总任务量作为进度条的最大值
bar.setmaximum(target.getamount());
final timer timer = new timer(300, new actionlistener() {
public void actionperformed(actionevent e) {
// 以任务的当前完成量设置进度条的value
bar.setvalue(target.getcurrent());
if (target.getamount() <= target.getcurrent()) {
statuslabel.settext("处理完成,oh yes!");
}
}
});
timer.start();
frame.setlocationrelativeto(null);
frame.setdefaultcloseoperation(jframe.dispose_on_close);
// frame.setdefaultcloseoperation(jframe.exit_on_close);
frame.addwindowlistener(new windowadapter() {
@override
public void windowclosing(windowevent e) {
thread.interrupt();
timer.stop();
// 系统退出
system.exit(0);
}
});
// 该代码依据放置的组件设定窗口的大小使之正好能容纳你放置的所有组件
frame.pack();
frame.setvisible(true);
}
public static void main(string[] args) {
new testjprogressbar().init();
}
}
// 模拟一个耗时的任务
class simulatedtarget implements runnable {
// 任务的当前完成量
private volatile int current;
// 总任务量
private int amount;
public simulatedtarget(int amount) {
current = 0;
this.amount = amount;
}
public int getamount() {
return amount;
}
public int getcurrent() {
return current;
}
// run方法代表不断完成任务的过程
public void run() {
while (current < amount) {
try {
thread.sleep(20);
} catch (interruptedexception e) {
}
current++;
}
}
public string getpercent() {
return string.format("%.1f", 100.0 * current / amount) + "%";
}
}
|
运行结果:
希望本文所述对大家java程序设计有所帮助。
原文链接:http://blog.csdn.net/qiuzhi__ke/article/details/49817453
相关文章
猜你喜欢
- ASP.NET本地开发时常见的配置错误及解决方法? 2025-06-10
- ASP.NET自助建站系统的数据库备份与恢复操作指南 2025-06-10
- 个人网站服务器域名解析设置指南:从购买到绑定全流程 2025-06-10
- 个人网站搭建:如何挑选具有弹性扩展能力的服务器? 2025-06-10
- 个人服务器网站搭建:如何选择适合自己的建站程序或框架? 2025-06-10
TA的动态
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
您的支持,是我们最大的动力!
热门文章
-
GitHub 机密扫描现在支持 PyPI 和 RubyGems
2025-05-29 47 -
2025-05-29 69
-
scikit-learn使用笔记与sign prediction简单小结
2025-05-27 110 -
在laravel-admin中列表中禁止某行编辑、删除的方法
2025-05-29 29 -
2025-05-26 68
热门评论



