【從零開始學 Java 程式設計】JProgressBar 元件
【從零開始學 Java 程式設計】 線上教學課程目錄,使用 Java 程式語言,開發應用程式。
JProgressBar 元件
JProgressBar 元件,可顯示目前工作進度百分比或是正在執行中畫面顯示。
範例
按下開始按鈕,透過 Thread 執行緒方法,每隔一秒,來更新 JProgressBar 進度條元件。
當進度條完成,點擊按鈕,可以關閉整個程式。
關鍵程式碼
private boolean isFinish = false;
class ProgressThread extends Thread {
JProgressBar jProgressBar;
JButton jButton;
int[] progressValues = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
ProgressThread(JProgressBar progressBar, JButton button) {
this.jProgressBar = progressBar;
this.jButton = button;
}
public void run() {
for (int i = 0; i < progressValues.length; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//設定進度條資料值
jProgressBar.setValue(progressValues[i]);
}
jProgressBar.setIndeterminate(false);
jProgressBar.setString("載入完成");
isFinish = true;
jButton.setText("關閉程式");
}
}
public void addComponentsToPane(Container pane) {
JProgressBar jProgressBar = new JProgressBar();
pane.add(jProgressBar, BorderLayout.CENTER);
jProgressBar.setStringPainted(true);
jProgressBar.setString("資料載入中...");
//progressBar.setIndeterminate(true);
JButton jButton = new JButton("開始");
pane.add(jButton, BorderLayout.SOUTH);
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (isFinish) {
System.exit(0);
} else {
Thread myThread = new ProgressThread(jProgressBar, jButton); // 建一個新的 Thread t1
myThread.start();
}
}
});
}
完整程式碼
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class DemoJProgressBar {
private boolean isFinish = false;
class ProgressThread extends Thread {
JProgressBar jProgressBar;
JButton jButton;
int[] progressValues = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
ProgressThread(JProgressBar progressBar, JButton button) {
this.jProgressBar = progressBar;
this.jButton = button;
}
public void run() {
for (int i = 0; i < progressValues.length; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//設定進度條資料值
jProgressBar.setValue(progressValues[i]);
}
jProgressBar.setIndeterminate(false);
jProgressBar.setString("載入完成");
isFinish = true;
jButton.setText("關閉程式");
}
}
public void addComponentsToPane(Container pane) {
JProgressBar jProgressBar = new JProgressBar();
pane.add(jProgressBar, BorderLayout.CENTER);
jProgressBar.setStringPainted(true);
jProgressBar.setString("資料載入中...");
//progressBar.setIndeterminate(true);
JButton jButton = new JButton("開始");
pane.add(jButton, BorderLayout.SOUTH);
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (isFinish) {
System.exit(0);
} else {
Thread myThread = new ProgressThread(jProgressBar, jButton); // 建一個新的 Thread t1
myThread.start();
}
}
});
}
public DemoJProgressBar() {
JFrame frame = new JFrame("HKT線上教室");
// 獲取螢幕解析度
Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
// 設定視窗大小佔螢幕四分之一
frame.setSize(dimension.width / 2, dimension.height / 2);
//設定視窗顯示在螢幕畫面中間位置
int x = (int) ((dimension.getWidth() - frame.getWidth()) / 2);
int y = (int) ((dimension.getHeight() - frame.getHeight()) / 2);
frame.setLocation(x, y);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//設定關閉可以關掉程式
//在 Pane 畫面中加入元件
addComponentsToPane(frame.getContentPane());
// frame.pack();
frame.setVisible(true);
}
//最一開始程式進入點
public static void main(String[] args) {
//使用 invokeLater 確保 UI 在排程執行緒內
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new DemoJProgressBar();
}
});
}
}
參考資料
那這次的課程就介紹到這邊囉~
順帶一提,KT 線上教室,臉書粉絲團,會不定期發佈相關資訊,不想錯過最新資訊,不要忘記來按讚,加追蹤喔!也歡迎大家將這套課程分享給更多人喔。
我們下次再見囉!!!掰掰~