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);
} catch (InterruptedException e) {
e.printStackTrace();
}
progressBar.setValue(progressValue[i]);
}
progressBar.setIndeterminate(false);
progressBar.setString("升級完成!");
button.setEnabled(true);
}
}
}