Swing JProgressBar類

2019-10-16 22:10:47

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範例(tw511.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示例