火力全开,拉满进度!Java多线程模拟进度条功能——JProgressBar的使用

0x1题目描述

利用多线程技术,实现一个下载的进度条,每秒下载10%.

0x2效果图

火力全开,拉满进度!Java多线程模拟进度条功能——JProgressBar的使用_第1张图片

0x3代码说明

Java中是有进度条组件的,即JProgressBar。

常用的方法:

方法 描述
JProgressBar() 创建一个水平进度条。
JProgressBar(int min, int max)

创建具有指定最小值和最大值的水平进度条。 

int getMaximum() 返回进度条最大值。
int getValue() 返回进度条当前值。
void setStringPainted(boolean b) 设置stringPainted属性的值,该属性确定是否呈现进度字符串。
void setValue(int n) 将进度条的当前值设置为n

代码中 下载窗口 DownloadWin类 继承了JFrame,其中包含内部类Task 继承了Thread(也包含进度条组件和按钮)。

单击开始按钮后,启动线程,每 0.1 秒下载1%.

0x4代码

import java.awt.event.*;
import java.util.concurrent.*;
import javax.swing.*;

public class _4进度条 {
	public static void main(String[] args) {
		new DownloadWin();
	}
}

//下载窗口,有一内部类Task继承了Thread
class DownloadWin extends JFrame {

	// 进度条,[0,100]
	private JProgressBar pb = new JProgressBar(0, 100);
	// 开始按钮:
	private JButton start = new JButton("开始");

	public DownloadWin() {
		super("下载进度");
		setSize(1200, 150);
		setLocation(500, 300);
		setResizable(false);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		setLayout(null);

		start.setBounds(5, 45, 90, 30);
		add(start);
		// 点击开始按钮后:
		start.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				start.setEnabled(false);
				pb.setValue(0);// 进度条初始进度为0
//				new Task().start();//这一行可以代替下面三行代码
				ExecutorService exec = Executors.newCachedThreadPool();
				exec.execute(new Task());
				exec.shutdown();
			}
		});

		pb.setBounds(100, 35, 1000, 50);
		pb.setStringPainted(true);// 字符串显示进度
		add(pb);

		setVisible(true);
	}

	private class Task extends Thread {

		public void run() {
			while (pb.getValue() < pb.getMaximum()) {

				try {
					sleep(100);
					pb.setValue(pb.getValue() + 1);
				} catch (Exception e) {
				}
			}
			start.setEnabled(true);
			start.setText("重新下载");
		}
	}
}

 

你可能感兴趣的:(java,多线程,gui)