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

這個網誌中的熱門文章

2023 最新入門零基礎 Kotlin教學【從零開始學 Kotlin 程式設計】Kotlin 教學課程目錄 (Android Kotlin, IntelliJ IDEA, Android Studio, Android APP 開發教學)

nano 文字編輯器

2022 最新入門零基礎 Flutter教學 【Flutter 程式設計入門實戰 30 天】Flutter 教學課程目錄 (IntelliJ IDEA 開發教學)

16天記下7000單字

最新入門零基礎 Java 教學【從零開始學 Java 程式設計】Java教學課程目錄 (IntelliJ IDEA 開發教學)