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示例(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) {
                }
            }
        }
    }
}

執行上面示例代碼,得到以下結果:

JProgressBar示例


上一篇: Swing控件 下一篇: Swing事件處理