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

Swing 滑桿與進度條聯動:共享模型的極簡實作

     編輯:Java 相關知識

核心概念:模型-視圖分離

Swing 採用 **MVC 變體**,元件 (View) 與資料 (Model) 分離。JSlider 與 JProgressBar 均使用 BoundedRangeModel,透過 **共享同一模型實例** 即可實現零程式碼同步。

完整範例代碼


public class Progress extends JPanel {
    JProgressBar pb = new JProgressBar();
    JSlider sb = new JSlider(JSlider.HORIZONTAL, 0, 100, 60);

    public Progress() {
        setLayout(new GridLayout(2, 1));
        add(pb);

        sb.setValue(0);
        sb.setPaintTicks(true);
        sb.setMajorTickSpacing(20);
        sb.setMinorTickSpacing(5);
        sb.setBorder(new TitledBorder("Slide Me"));

        // 核心一行:共享模型
        pb.setModel(sb.getModel());

        add(sb);
    }

    public static void main(String[] args) {
        Show.inFrame(new Progress(), 200, 150);
    }
}

關鍵 API 解析

方法說明
setPaintTicks(true)顯示刻度標記
setMajorTickSpacing(20)主刻度間距
setMinorTickSpacing(5)次刻度間距
setBorder(new TitledBorder(...))添加帶標題邊框,提升易用性
pb.setModel(sb.getModel())**核心**:進度條直接使用滑桿模型,雙向同步

擴展應用場景

  • 音量控制:滑桿調整,進度條顯示當前音量百分比。
  • 播放進度:滑桿拖動求時,進度條顯示緩衝/播放進度(需雙模型協調)。
  • 參數調節面板:多個滑桿共享模型至多個進度條/標籤,構建儀表板。

進階:自定義模型


// 針對特殊需求(如非線性映射、區間限制)可繼承 DefaultBoundedRangeModel
class LogarithmicModel extends DefaultBoundedRangeModel {
    @Override public void setValue(int nv) {
        // 對數轉換邏輯
        super.setValue(transform(nv));
    }
}

結語

JSlider + JProgressBar 共享模型是 Swing **「資料驅動 UI」** 哲學的經典展現:一行代碼實現雙向綁定。掌握模型分離思想,能大幅減少事件監聽與手動同步代碼,構建更清晰、可維護的介面邏輯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved