多线程-进度条

package com.Thread.work1;

import java.awt.BorderLayout;
import java.awt.Color;
import java.lang.reflect.InvocationTargetException;
import java.util.concurrent.TimeUnit;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.SwingUtilities;

public class ProgressTaskDemo extends JFrame{
    /** 进度条 */
    private JProgressBar progressBar = new JProgressBar();
    /** 开始按钮 */
    private JButton btnStart = new JButton("开启线程");
    /** 暂停按钮 */
    private JButton btnPause = new JButton("暂停线程");
    /** 创建进度条多线程类 */
    private ProgressBarTask progressBarTask = null;
    /** 创建改变颜色多线程类 */
    private ChangeColorTask changeColorTask = null;
    public ProgressTaskDemo(){
        setTitle("多线程进度条");
        JPanel jPanel = new JPanel();
        jPanel.add(btnStart);
        jPanel.add(btnPause);
        getContentPane().add(progressBar,BorderLayout.CENTER);
        getContentPane().add(jPanel,BorderLayout.NORTH);
        //进度条的百分比
        progressBar.setStringPainted(true);
        //设置进度条的颜色 默认蓝色
        progressBar.setBackground(Color.blue);
        //监听器
        listener();
        setVisible(true);
    }
    /**
     * 监听器
     */
    public void listener() {
        btnStart.addActionListener(e->{
            //每次点击开启线程按钮 都是创建一个新的线程,而不是真正的暂停。
            progressBarTask = new ProgressBarTask(progressBar);
            Thread thread1 = new Thread(progressBarTask);
            thread1.start();
            
            changeColorTask = new ChangeColorTask(progressBar);
            Thread thread2 = new Thread(changeColorTask);
            thread2.start();
        });
        //暂停按钮
        btnPause.addActionListener(e->{
            progressBarTask.stop();
            changeColorTask.stop();
        });
    }
    public static void main(String[] args) throws InvocationTargetException, InterruptedException {
        SwingUtilities.invokeAndWait(new Runnable() {
            
            @Override
            public void run() {
                new ProgressTaskDemo();
                
            }
        });
        
    }
}

class ProgressBarTask implements Runnable{
    private JProgressBar jprogressBar;
    /** 线程进行的标志 */
    private boolean isRunning = true;
    /**
     * 线程停止
     */
    public void stop() {
        this.isRunning = false;
    }
    public ProgressBarTask(JProgressBar jprogressBar) {
        this.jprogressBar = jprogressBar;
    }
    @Override
    public void run() {
        while(jprogressBar.getValue() <= 100 && isRunning) {
            jprogressBar.setValue(jprogressBar.getValue() + 1);
            try {
                TimeUnit.MILLISECONDS.sleep(200);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }    
}
/**
 * 改变颜色
 * @author TRz
 * @date 2020年10月31日上午8:35:01
 * @remarks TODO
 */
class ChangeColorTask implements Runnable{
    private JProgressBar jprogressBar;
    /** 线程进行的标志 */
    private boolean ischanging = true;
    private Color[] color = new Color[10];
    public ChangeColorTask(JProgressBar jprogressBar) {
        this.jprogressBar = jprogressBar;
        color[0] = Color.red;
        color[1] = Color.blue;
        color[2] = Color.cyan;
        color[3] = Color.darkGray;
        color[4] = Color.gray;
        color[5] = Color.green;
        color[6] = Color.LIGHT_GRAY;
        color[7] = Color.magenta;
        color[8] = Color.orange;
        color[9] = Color.pink;
    }
    
    public void stop() {
        this.ischanging = false;
    }
    
    @Override
    public void run() {
        while(jprogressBar.getValue() < 100 && ischanging) {
            //1 - 10之间的随机数
            int key = (int)(Math.random() * 999) % 10;
            jprogressBar.setBackground(color[key]);
            try {
                TimeUnit.MILLISECONDS.sleep(50);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    
}

 

posted @ 2020-10-31 14:51  阿水弟弟  阅读(212)  评论(0)    收藏  举报