[转载]java 进度条

原文地址:java 进度条作者:一度_何成飞

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;

public class MyProgressBar extends Canvas {
 private float scaleSize;
 private float currentValue;
 
 public MyProgressBar(){
  this(100, 50);
 }
 
 public MyProgressBar(float scaleSize, float currentValue){
  this.scaleSize = scaleSize;
  this.currentValue = currentValue;
  
  this.setBackground(Color.lightGray);
  this.setForeground(Color.magenta);
  setSize(150, 25);
 }
 
 public float getCurrentValue() {
  return currentValue;
 }
 public void setCurrentValue(float currentValue) {
  this.currentValue = Math.max(0, currentValue);
  if (this.scaleSize < this.currentValue) {
   this.currentValue = this.scaleSize;
  }
 }
 public float getScaleSize() {
  return scaleSize;
 }
 public void setScaleSize(float scaleSize) {
  this.scaleSize = Math.max(1.0f, scaleSize);
  if (this.scaleSize < this.currentValue) {
   this.scaleSize = this.currentValue;
  }
 }

 public synchronized void paint(Graphics g){
  int w = getSize().width;
  int h = getSize().height;
  
  g.setColor(getBackground());
  g.fillRect(1, 1, w-2, h-2);
  g.fill3DRect(0, 0, w-1, h-1, true);
  
  g.setColor(getForeground());
  g.fillRect(3, 3, (int)(currentValue*(w-6)/scaleSize), h-6);
 }
}

 

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class TestMyProgressBar extends JFrame implements Runnable,
  ActionListener {

 private MyProgressBar bar;
 private JButton btnStart;
 static TestMyProgressBar tmpb;

 public TestMyProgressBar() {
  setSize(400, 300);
  setLocation(400, 400);
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  setTitle("演示自定义进度条");
  setLayout(new FlowLayout());
  btnStart = new JButton("开始");
  this.add(btnStart);
  btnStart.addActionListener(this);
  bar = new MyProgressBar();
  setVisible(true);
 }

 public static void main(String[] args) {
  tmpb = new TestMyProgressBar();
 }

 @Override
 public void run() {
  for (int i = 1; i <= 20; i++) {
   int x = i * 5;
   bar.setCurrentValue(x);
   if (x > 0 && x < 100) {
    btnStart.setEnabled(false);
   }
   if (x == 100) {
    btnStart.setEnabled(true);
   }
   try {
    Thread.sleep(200);
    add(bar);
    
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
  }
 }

 @Override
 public void actionPerformed(ActionEvent e) {
  if (e.getActionCommand().equals("开始")) {
   Thread t = new Thread(tmpb);
   t.start();
  }
 }
}

原文地址:https://www.cnblogs.com/liuzhuqing/p/7481078.html