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();
}
}
运行截图:
进度条可以随时间的变化而变化