【從零開始學 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 線上教室,臉書粉絲團,會不定期發佈相關資訊,不想錯過最新資訊,不要忘記來按讚,加追蹤喔!也歡迎大家將這套課程分享給更多人喔。
我們下次再見囉!!!掰掰~