JProgressBar类是一个可视地显示某个任务进度的组件。
类声明
以下是javax.swing.JProgressBar类的声明 -
public class JProgressBar
extends JComponent
implements SwingConstants, Accessible
字段
以下是javax.swing.JProgressBar类的字段 -
protected ChangeEvent changeEvent- 每个实例只需要一个ChangeEvent,因为事件唯一有趣的属性是不可变源,即进度条。protected ChangeListener changeListener- 侦听进度条模型发送的更改事件,将它们重新分配给在此进度条上注册的更改事件侦听器。protected BoundedRangeModel model- 保存进度条数据的对象。protected int orientation- 进度条是水平还是垂直。protected boolean paintBorder- 是否在进度条周围显示边框。protected boolean paintString- 是否在进度条上显示文本字符串。protected String progressString- 可以在进度条上显示的可选字符串。
类构造函数
| 编号 | 构造函数 | 描述 |
|---|---|---|
| 1 | JProgressBar() |
创建一个水平进度条,显示边框但没有进度字符串。 |
| 2 | JProgressBar(BoundedRangeModel newModel) |
创建一个水平进度条,使用指定的模型来保存进度条数据。 |
| 3 | JProgressBar(int orient) |
创建具有指定方向的进度条,可以是SwingConstants.VERTICAL 或SwingConstants.HORIZONTAL。 |
| 4 | JProgressBar(int min, int max) |
创建具有指定最小值和最大值的水平进度条。 |
| 5 | JProgressBar(int orient, int min, int max) |
使用指定的方向,最小值和最大值创建进度条。 |
类方法
| 编号 | 方法 | 描述 |
|---|---|---|
| 1 | void addChangeListener(ChangeListener l) |
将指定的ChangeListener添加到进度栏。 |
| 2 | protected ChangeListener createChangeListener() |
以不同方式处理模型中的更改事件的子类。 |
| 3 | protected void fireStateChanged() |
将源为JProgressBar的ChangeEvent发送给已注册对ChangeEvents感兴趣的所有ChangeListener。 |
| 4 | AccessibleContext getAccessibleContext() |
获取与此JProgressBar关联的AccessibleContext。 |
| 5 | ChangeListener[] getChangeListeners() |
返回使用addChangeListener添加到此进度栏的 所有ChangeListener的数组。 |
| 6 | int getMaximum() |
从有界范围模型返回进度条最大值。 |
| 7 | int getMinimum() |
从BoundedRangeModel返回进度条的最小值。 |
| 8 | BoundedRangeModel getModel() |
返回此进度条使用的数据模型。 |
| 9 | int getOrientation() |
返回SwingConstants.VERTICAL或SwingConstants.HORIZONTAL,具体取决于进度条的方向。 |
| 10 | double getPercentComplete() |
返回进度条的完成百分比。 |
| 11 | String getString() |
返回当前进度的String表示形式。 |
| 12 | ProgressBarUI getUI() |
返回呈现此组件的外观对象。 |
| 13 | String getUIClassID() |
返回呈现此组件的外观类的名称。 |
| 14 | int getValue() |
从有界范围模型返回进度条当前值。 |
| 15 | boolean isBorderPainted() |
返回borderPainted属性。 |
| 16 | boolean isIndeterminate() |
返回indeterminate属性的值。 |
| 17 | boolean isStringPainted() |
返回stringPainted属性的值。 |
| 18 | protected void paintBorder(Graphics g) |
绘制边框的进度条边框绘制属性为true。 |
| 19 | protected String paramString() |
返回此JProgressBar的字符串表示形式。 |
| 20 | void removeChangeListener(ChangeListener l) |
从进度栏中删除ChangeListener。 |
| 21 | void setBorderPainted(boolean b) |
设置borderPainted属性。 |
| 22 | void setIndeterminate(boolean newValue) |
设置进度条的不确定属性。 |
| 23 | void setMaximum(int n) |
将进度条的最大值(存储在进度条的数据模型中)设置为n。 |
| 24 | void setMinimum(int n) |
将进度条的最小值(存储在进度条的数据模型中)设置为n。 |
| 25 | void setModel(BoundedRangeModel newModel) |
设置JProgressBar使用的数据模型。 |
| 26 | void setOrientation(int newOrientation) |
将进度条的方向设置为newOrientation。 |
| 27 | void setString(String s) |
设置进度字符串的值。 |
| 28 | void setStringPainted(boolean b) |
设置stringPainted属性的值。 |
| 29 | void setUI(ProgressBarUI ui) |
设置呈现此组件的外观对象。 |
| 30 | void setValue(int n) |
将进度条的当前值设置为n。 |
| 31 | void updateUI() |
将UI属性重置为当前外观的值。 |
方法继承
该类继承以下类中的方法 -
javax.swing.JComponentjava.awt.Containerjava.awt.Componentjava.lang.Object
JProgressBar示例
使用编辑器创建以下Java程序 -
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JProgressBarExample {
private JFrame mainFrame;
private JLabel headerLabel;
private JLabel statusLabel;
private JPanel controlPanel;
public JProgressBarExample() {
prepareGUI();
}
public static void main(String[] args) {
JProgressBarExample swingControlDemo = new JProgressBarExample();
swingControlDemo.showProgressBarDemo();
}
private void prepareGUI() {
mainFrame = new JFrame("Java Swing JProgressBar示例(xuhuhu.com)");
mainFrame.setSize(400, 400);
mainFrame.setLayout(new GridLayout(3, 1));
mainFrame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent windowEvent) {
System.exit(0);
}
});
headerLabel = new JLabel("", JLabel.CENTER);
statusLabel = new JLabel("", JLabel.CENTER);
statusLabel.setSize(350, 100);
controlPanel = new JPanel();
controlPanel.setLayout(new FlowLayout());
mainFrame.add(headerLabel);
mainFrame.add(controlPanel);
mainFrame.add(statusLabel);
mainFrame.setVisible(true);
}
private JProgressBar progressBar;
private Task task;
private JButton startButton;
private JTextArea outputTextArea;
private void showProgressBarDemo() {
headerLabel.setText("Control in action: JProgressBar");
progressBar = new JProgressBar(0, 100);
progressBar.setValue(0);
progressBar.setStringPainted(true);
startButton = new JButton("开始...");
outputTextArea = new JTextArea("", 5, 20);
JScrollPane scrollPane = new JScrollPane(outputTextArea);
startButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
task = new Task();
task.start();
}
});
controlPanel.add(startButton);
controlPanel.add(progressBar);
controlPanel.add(scrollPane);
mainFrame.setVisible(true);
}
private class Task extends Thread {
public Task() {
}
public void run() {
for (int i = 0; i <= 100; i += 10) {
final int progress = i;
SwingUtilities.invokeLater(new Runnable() {
public void run() {
progressBar.setValue(progress);
outputTextArea.setText(
outputTextArea.getText() + String.format("任务已完成:%d%% \n", progress));
}
});
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
}
}
}
}
执行上面示例代码,得到以下结果:

