首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java Swing 進度條 JProgressBar 與滑動條 JSlider 完整應用指南

     編輯:Java 相關知識

JProgressBar:任務進度可視化

基本屬性

  • `setStringPainted(true)`:顯示百分比文字。
  • `setIndeterminate(true)`:不確定進度模式(來回動畫)。
  • `setBorderPainted(false)`:隱藏邊框。

模擬耗時任務 + Timer 輪詢


class SimulatedTarget implements Runnable {
    private volatile int current = 0;
    private final int amount;
    SimulatedTarget(int amount) { this.amount = amount; }
    public int getAmount() { return amount; }
    public int getCurrent() { return current; }
    public void run() {
        while (current < amount) { Thread.sleep(50); current++; }
    }
}

// UI 組裝
JProgressBar bar = new JProgressBar(JProgressBar.VERTICAL);
bar.setMinimum(0);
bar.setMaximum(target.getAmount());
new Thread(target).start();
new Timer(300, e -> bar.setValue(target.getCurrent())).start();

ProgressMonitor:內建對話框式進度

  • 一行代碼彈出模態對話框,含「取消」按鈕。
  • 適用於簡單阻塞任務,犧牲自定義彈性。

ProgressMonitor monitor = new ProgressMonitor(null, "等待任務完成", "已完成:", 0, target.getAmount());
new Timer(300, e -> {
    monitor.setProgress(target.getCurrent());
    if (monitor.isCanceled()) { timer.stop(); targetThread.interrupt(); System.exit(0); }
}).start();

JSlider:豐富樣式的數值選擇器

共用 `BoundedRangeModel`,支援:

  • 刻度:`setPaintTicks(true)` + `setMajorTickSpacing(20)` + `setMinorTickSpacing(5)`。
  • 吸附刻度:`setSnapToTicks(true)`。
  • 隱藏軌道:`setPaintTrack(false)`。
  • 反向:`setInverted(true)`。
  • 標籤:`setPaintLabels(true)` + `setLabelTable(Map)`(支援文字/圖標)。

綜合示範:同一視窗展示 10 種樣式


ChangeListener listener = e -> showVal.setText("值:" + ((JSlider)e.getSource()).getValue());

// 普通
addSlider(new JSlider(), "普通");
// 保留區 extent=30
JSlider s = new JSlider(); s.setExtent(30); addSlider(s, "保留區30");
// 主次刻度 + 範圍
s = new JSlider(30,200); s.setPaintTicks(true); s.setMajorTickSpacing(20); s.setMinorTickSpacing(5); addSlider(s, "有刻度");
// 吸附刻度
s = new JSlider(); s.setSnapToTicks(true); s.setPaintTicks(true); s.setMajorTickSpacing(20); s.setMinorTickSpacing(5); addSlider(s, "吸附刻度");
// 無軌道
s = new JSlider(); s.setPaintTrack(false); s.setPaintTicks(true); ... addSlider(s, "無軌道");
// 反向
s = new JSlider(); s.setInverted(true); s.setPaintTicks(true); ... addSlider(s, "反向");
// 數值標籤
s = new JSlider(); s.setPaintLabels(true); s.setPaintTicks(true); ... addSlider(s, "數值標籤");
// 自定文字標籤
s = new JSlider(); s.setPaintLabels(true); s.setLabelTable(Map.of(0,new JLabel("A"),20,new JLabel("B"),...)); addSlider(s, "文字標籤");
// 自定圖標標籤
s = new JSlider(); s.setPaintLabels(true); s.setLabelTable(Map.of(0,new JLabel(new ImageIcon("0.gif")),...)); addSlider(s, "圖標標籤");

選型建議

場景推薦組件
後台任務進度回報JProgressBar / ProgressMonitor
用戶手動選擇數值範圍JSlider
精確微調數值/日期/列表JSpinner
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved