java Swing 进度条
1 package io.guanghe;
2
3 import javax.swing.*;
4
5 /*
6 ProgressMonitor的用法与ProgressBar相似 , ProgressMonitor可以直接创建一个进度对话框
7 提供的构造方法:
8 public ProgressMonitor(Component parentComponent,Object message,String note,
9 int min,int max):
10 parentComponent: 对话框的父组件
11 message: 对话框的描述信息
12 note: 进度的提示信息
13 min: 进度条的最小值
14 max: 进度条的最大值
15 */
16 public class Progress {
17
18 //定时器
19 Timer timer;
20 //任务线程
21 private static class SimulatorActivity implements Runnable {
22 //内存可见
23 private volatile int current = 0;
24 private int amount;
25 public SimulatorActivity(int amount) {
26 this.amount = amount;
27 }
28 public int getCurrent() {
29 return current;
30 }
31 public void setCurrent(int current) {
32 this.current = current;
33 }
34 public int getAmount() {
35 return amount;
36 }
37 public void setAmount(int amount) {
38 this.amount = amount;
39 }
40 @Override
41 public void run() {
42 //通过循环,不断的修改current的值,模拟任务我完成量
43 while (current < amount) {
44 try {
45 Thread.sleep(50);
46 } catch (InterruptedException e) {
47 e.printStackTrace();
48 }
49 current++;
50 }
51 }
52 }
53
54 private Timer initTimer(ProgressMonitor monitor, SimulatorActivity simulatorActivity) {
55 //设置定时任务
56 return new Timer(100, e -> {
57 //读取当前任务量,修改进度
58 int current = simulatorActivity.getCurrent();
59 monitor.setProgress(current);
60 //判断用户是否点击了取消按钮,停止定时任务,关闭对话框,退出程序
61 if (monitor.isCanceled()) {
62 timer.stop();
63 monitor.close();
64 System.exit(0);
65 }
66 if (current == 100) {
67 System.exit(0);
68 }
69 });
70 }
71
72 public void init() {
73 //创建view
74 ProgressMonitor monitor = new ProgressMonitor(null, "等待任务完成", "已完成", 0, 100);
75 //创建任务model
76 SimulatorActivity simulaterActivity = new SimulatorActivity(100);
77 //执行任务model
78 new Thread(simulaterActivity).start();
79 //开启监听controller
80 initTimer(monitor, simulaterActivity).start();
81 }
82
83 public static void main(String[] args) {
84 new Progress().init();
85 }
86 }