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

Java JColorChooser 顏色選擇器完整應用:即時預覽、HSB/RGB 模式與事件監聽實戰

     編輯:Java 相關知識

構建一個整合顏色選擇器與即時預覽標籤的 Swing 應用,展示 JColorChooser 的三大選色模式(色板、HSB、RGB)、選色事件監聽、顏色應用於元件前景色,代碼結構清晰,可直接嵌入專案作為顏色設定功能模組。

核心類別:ColorChooserDemo


import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.colorchooser.*;
public class ColorChooserDemo extends JPanel implements ChangeListener {
    protected JColorChooser tcc;
    protected JLabel banner;
    public ColorChooserDemo() {
        super(new BorderLayout());
        // 預覽標籤
        banner = new JLabel("歡迎使用顏色選擇器!", JLabel.CENTER);
        banner.setForeground(Color.YELLOW);
        banner.setBackground(Color.BLUE);
        banner.setOpaque(true);
        banner.setFont(new Font("SansSerif", Font.BOLD, 24));
        banner.setPreferredSize(new Dimension(100, 65));
        JPanel bannerPanel = new JPanel(new BorderLayout());
        bannerPanel.add(banner, BorderLayout.CENTER);
        bannerPanel.setBorder(BorderFactory.createTitledBorder("預覽區"));
        // 顏色選擇器
        tcc = new JColorChooser(banner.getForeground()); // 初始顏色
        tcc.getSelectionModel().addChangeListener(this); // 監聽顏色變更
        tcc.setBorder(BorderFactory.createTitledBorder("選擇顏色"));
        // 佈局
        add(bannerPanel, BorderLayout.CENTER);
        add(tcc, BorderLayout.PAGE_END);
    }
    // 顏色變更事件處理
    public void stateChanged(ChangeEvent e) {
        Color newColor = tcc.getColor();
        banner.setForeground(newColor); // 即時應用於標籤前景
    }
    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            JFrame frame = new JFrame("JColorChooser Demo");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setContentPane(new ColorChooserDemo());
            frame.pack();
            frame.setVisible(true);
        });
    }
}

JColorChooser 三大內建選色模式

模式頁籤適用場景核心參數
Swatches(色板)快速選取預定義顏色可自訂 ColorChooserPanel
HSB設計師習慣:色相、飽和度、亮度H: 0-360°, S/B: 0-100%
RGB開發者習慣:紅綠藍分量R/G/B: 0-255

進階客製化技巧

  1. 移除不需要的頁籤:
    
    AbstractColorChooserPanel[] panels = tcc.getChooserPanels();
    List keep = new ArrayList<>();
    for (AbstractColorChooserPanel p : panels) {
        if (p.getDisplayName().equals("HSB")) keep.add(p); // 只保留 HSB
    }
    tcc.setChooserPanels(keep.toArray(new AbstractColorChooserPanel[0]));
    
  2. 自訂預覽面板:
    
    tcc.setPreviewPanel(new MyCustomPreviewPanel()); // 實作 AbstractColorChooserPanel
    
  3. 整合對話框模式**:
    
    Color chosen = JColorChooser.showDialog(parent, "選擇顏色", initialColor);
    if (chosen != null) { /* 用戶確定 */ } else { /* 用戶取消 */ }
    
  4. 顏色持久化**:將 Color.getRGB() 存入資料庫/配置檔,載入時 new Color(rgb)。

事件模型深度解析

  • ChangeListener 監聽 ColorSelectionModel 變更
  • 事件源:tcc.getSelectionModel()
  • 獲取新顏色:tcc.getColor() 或 model.getSelectedColor()
  • 高頻觸發:拖曳滑桿時連續觸發,若執行昂貴操作(如即時重繪大圖)需加去抖動。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved