Java Swing 進度條


Swing 進度條

  • 利用 JProgressBar 類可以創建進度條。進度條本質是就是一個矩形組件,通過填充它的一部分或者全部來指示一個任務的具體執行情況;
  • 默認情況下,要確保既定任務的執行進度和進度條的填充區域成正比關係,如果並不確定任務的執行進度,則可以通過調用方法 setIndeterminate( boolean b) 來設置進度條的樣式。設置爲 true,表示不確定任務的執行進度,填充區域會來回滾動;設置爲 false 則表示確定任務的執行進度;
  • 一般來說,在進度條中不顯示提示信息,可以調用 setStringPainted(boolean b) 來設置是否顯示提示信息,true 表示顯示信息,false 表示不顯示信息。如果是將確定進度的進度條設置爲顯示信息,默認爲當前任務完成的百分比,也可以通過方法 setString(String s) 設置指定的提示信息;如果將不確定進度的進度條設置爲顯示提示信息,則必須設置指定的提示信息,否則將出現填充面積和進度提示信息不匹配的不正確效果;
  • 如果採用確定進度的進度條,進度條並不能自動獲取任務的執行速度,不需通過方法 setValue(int n) 反覆修改當前的執行速度,例如將入口參數設置爲 88,則將顯示爲 88%;如果採用不確定進度的進度條,則需要在任務執行完成後將其設置爲採用確定進度的進度條,並將任務的執行進度設置爲 100%,或者是設置指定的提示已完成的信息;

1. 應用:使用進度條

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Test extends JFrame {

    public static void main(String args[]) {
        Test frame = new Test();
        frame.setVisible(true);
    }

    public Test() {
        super();
        getContentPane().setLayout(new GridBagLayout());
        setTitle("Regino");
        setBounds(100, 100, 500, 375);
        setBounds(100, 100, 266, 132);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        final JLabel label = new JLabel();
        label.setForeground(new Color(255, 107, 87));
        label.setFont(new Font("", Font.BOLD, 16));
        label.setText("歡迎使用在線升級功能!");
        final GridBagConstraints gridBagConstraints = new GridBagConstraints();
        gridBagConstraints.gridy = 0;
        gridBagConstraints.gridx = 0;
        getContentPane().add(label, gridBagConstraints);

        final JProgressBar progressBar = new JProgressBar();// 創建進度條對象
        progressBar.setStringPainted(true);// 設置顯示提示信息
        progressBar.setIndeterminate(true);// 設置採用不確定進度條
        progressBar.setString("升級進行中......");// 設置提示信息
        final GridBagConstraints gridBagConstraints_1 = new GridBagConstraints();
        gridBagConstraints_1.insets = new Insets(5, 0, 0, 0);
        gridBagConstraints_1.gridy = 1;
        gridBagConstraints_1.gridx = 0;
        getContentPane().add(progressBar, gridBagConstraints_1);

        final JButton button = new JButton();
        button.setText("完成");
        button.setEnabled(false);
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });
        final GridBagConstraints gridBagConstraints_2 = new GridBagConstraints();
        gridBagConstraints_2.insets = new Insets(5, 0, 0, 0);
        gridBagConstraints_2.gridy = 2;
        gridBagConstraints_2.gridx = 1;
        getContentPane().add(button, gridBagConstraints_2);
        new Progress(progressBar, button).start();// 利用線程模擬一個在線升級任務
    }

    class Progress extends Thread {// 利用線程模擬一個在線升級任務
        private final int[] progressValue = {6, 18, 27, 39, 51, 66, 81,
                100};// 模擬任務完成百分比
        private JProgressBar progressBar;// 進度條對象
        private JButton button;// 完成按鈕對象

        public Progress(JProgressBar progressBar, JButton button) {
            this.progressBar = progressBar;
            this.button = button;
        }

        public void run() {
            // 通過循環更新任務完成百分比
            for (int i = 0; i < progressValue.length; i++) {
                try {
                    Thread.sleep(1000);// 令線程休眠1秒
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                progressBar.setValue(progressValue[i]);// 設置任務完成百分比
            }
            progressBar.setIndeterminate(false);// 設置採用確定進度條
            progressBar.setString("升級完成!");// 設置提示信息
            button.setEnabled(true);// 設置按鈕可用
        }
    }
}
  • 效果圖:
    1
    2
  • 注:可以使用顏色盤選擇顏色:
    3
    4
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章