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) + " %"); } } }