您的位置首页百科知识

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

}

}

}