java.lang.Object
--java.awt.Component
--java.awt.Container
--javax.swing.JComponent
--javax.swing.JProgressBar
当你在安装一个新软件时,系统会告知你目前软件安装的进度如何?才不会让你觉得程序好像死了,同样的,若你设计的程序所 需要的运行超过2秒以上,你应该显示程序正在运行中的图标,或直接显示程序运行的进度,这样就能让用户清楚知道程序到底是死 了还是继续运行,在swing中,JProgressBar组件提供了类似这样的功能,它可以簋简单地输出进度的变化情况,让你想要提供进度 信息时,不再需要自行绘制绘图组件,只需要使用JProgressBar再加上几行程序设置就可以了。以下是JProgressBar的范例,在此 范例中,我们使用Timer组件当作控制进度杆移动的速度,当用户按下"start"按钮,则进度杆线就会开始向右移动,并显示出目前 的进度信息。每当JProgressBar的值改变一次(利用setValue()方法),就会触发一次ChangeEvent事件,如果你要处理这个事件, 你必须实作ChangeListener界面所定义的stateChanged()方法,在此我们是将JPogressBar的移动信息放在label上。
import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
public class ProgressBarDemo implements ActionListener, ChangeListener {
JFrame f = null;
JProgressBar progressbar;
JLabel label;
Timer timer;
JButton b;
public ProgressBarDemo() {
f = new JFrame("progressbar Example");
Container contentPane = f.getContentPane();
label = new JLabel(" ", JLabel.CENTER);
progressbar = new JProgressBar();
progressbar.setOrientation(JProgressBar.HORIZONTAL);
progressbar.setMinimum(0);
progressbar.setMaximum(100);
progressbar.setValue(0);
progressbar.setStringPainted(true);
progressbar.addChangeListener(this);
progressbar.setPreferredSize(new Dimension(200, 30));
progressbar.setBorderPainted(false);
JPanel panel = new JPanel();
b = new JButton("Start");
b.addActionListener(this);
panel.add(b);
timer = new Timer(50, this);
contentPane.add(panel, BorderLayout.NORTH);
contentPane.add(progressbar, BorderLayout.CENTER);
contentPane.add(label, BorderLayout.SOUTH);
f.pack();
f.setVisible(true);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public static void main(String[] args) {
new ProgressBarDemo();
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == b) {
timer.start();
}
if (e.getSource() == timer) {
int value = progressbar.getValue();
if (value < 100) {
value++;
progressbar.setValue(value);
} else {
timer.stop();
progressbar.setValue(0);
}
}
}
public void stateChanged(ChangeEvent e1) {
int value = progressbar.getValue();
if (e1.getSource() == progressbar) {
label.setText("目前已完成进度:" + Integer.toString(value) + " %");
}
}
}