JAVA特殊容器JProgressBar进度条

该博客介绍了如何使用Java Swing创建一个动态的JProgressBar,包括设置水平进度条、不确定进度条模式、是否显示字符串和边框。通过监听进度条变化和模拟耗时任务,展示了进度条随着任务执行实时更新的效果。
摘要由CSDN通过智能技术生成
JProgressBar jProgressBar=new JProgressBar(JProgressBar.HORIZONTAL,0,100);//设置水平进度
条,范围是0-100
jProgressBar.setIndeterminate(true/false);//设置不确定进度条
jProgressBar.setStringPainted(true/false);//设置确定进度条
jProgressBar.setBorderPainted(true/false);;//设置有无边框

import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class jprogress {
    JFrame jFrame=new JFrame();
    JProgressBar jProgressBar=new JProgressBar(JProgressBar.HORIZONTAL,0,100);
    JCheckBox j1=new JCheckBox("不确定进度条");
    JCheckBox j2=new JCheckBox("不绘制边框");

    private  class stimulate implements Runnable{
        private volatile int amount;//任务总量  volatile内存可见
        private int nowamount;//当前任务量


        public stimulate(int amount) {
            this.amount=amount;
        }

        public int getAmount() {
            return amount;
        }

        public void setAmount(int amount) {
            this.amount = amount;
        }

        public int getNowamount() {
            return nowamount;
        }


        @Override
        public void run() {
            //子线程的任务
         while (nowamount<amount){
             try {
                 Thread.currentThread().sleep(50);
             } catch (InterruptedException e) {
                 e.printStackTrace();
             }
             nowamount++;
         }
        }
    }

    private  void  vivid() throws InterruptedException {
j1.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        boolean selected = j1.isSelected();
        jProgressBar.setIndeterminate(selected);//设置不确定进度条
        jProgressBar.setStringPainted(!selected);

    }
});
j2.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        boolean selected = j2.isSelected();
        jProgressBar.setBorderPainted(!selected);
    }
});


Box box=Box.createVerticalBox();
box.add(j1);
box.add(j2);
jProgressBar.setStringPainted(true);
jProgressBar.setBorderPainted(true);
jFrame.add(box);
jFrame.setLayout(new FlowLayout());
jFrame.add(jProgressBar);

jFrame.pack();
jFrame.setVisible(true);

//开启子线程模拟耗时操作
        stimulate s = new stimulate(jProgressBar.getMaximum());
        new Thread(s).start();

//设置一个定时任务
        Timer timer=new Timer(200, new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                int current=s.getNowamount();
                jProgressBar.setValue(current);
            }
        });
timer.start();
//监听任务条的变化
        jProgressBar.addChangeListener(new ChangeListener() {
            @Override
            public void stateChanged(ChangeEvent e) {
                int value=jProgressBar.getValue();
                if(value==s.getAmount()){
                    timer.stop();
                }
            }
        });
    }


    public static void main(String[] args) throws InterruptedException {
        new jprogress().vivid();
    }
}

运行截图:

 

进度条可以随时间的变化而变化

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值