橘子味的心
标题:Swing JProgressBar

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.VERTICALSwingConstants.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() 将源为JProgressBarChangeEvent发送给已注册对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.VERTICALSwingConstants.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.JComponent
  • java.awt.Container
  • java.awt.Component
  • java.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示例(yiibai.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) {
                }
            }
        }
    }
}

执行上面示例代码,得到以下结果:


目录

分类