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();
}
}
}