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

Swing 顏色選擇器實戰:JColorChooser 即時預覽與 ChangeListener

     編輯:Java 程式設計入門

功能描述

頂部標簽區顯示大號廣告語,背景色固定藍色,前景色跟隨用戶在 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 {
    private JColorChooser chooser;
    private JLabel banner;

    public ColorChooserDemo() {
        super(new BorderLayout());

        // 1. 頂部橫幅標簽
        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(400, 65));

        JPanel bannerPanel = new JPanel(new BorderLayout());
        bannerPanel.add(banner, BorderLayout.CENTER);
        bannerPanel.setBorder(BorderFactory.createTitledBorder("廣告區"));
        add(bannerPanel, BorderLayout.CENTER);

        // 2. 底部顏色選擇器
        chooser = new JColorChooser(banner.getForeground()); // 初始色 = 標簽前景色
        chooser.getSelectionModel().addChangeListener(this); // 監聽所有模式變化
        chooser.setBorder(BorderFactory.createTitledBorder("選擇顏色"));
        add(chooser, BorderLayout.PAGE_END);
    }

    @Override
    public void stateChanged(ChangeEvent e) {
        Color newColor = chooser.getColor(); // 獲取當前選中顏色
        banner.setForeground(newColor); // 即時更新標簽前景
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            JFrame f = new JFrame("ColorChooserDemo");
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.setContentPane(new ColorChooserDemo());
            f.pack();
            f.setVisible(true);
        });
    }
}

JColorChooser 三大標籤頁詳解

標籤頁對應選擇器類適用場景
色板AbstractColorChooserPanel 子類快速挑選常用顏色,支持自定義色板
HSBHSBColorChooserPanel按色相/飽和度/亮度直觀調整,設計師偏好
RGBRGBColorChooserPanel精確輸入 0-255 數值,程序員/美術協作

進階定制技巧

  • 嵌入對話框:JColorChooser.showDialog(parent, title, initialColor) 返回選中 Color 或 null(取消)
  • 預覽面板:chooser.setPreviewPanel(new JPanel()) 自定義預覽組件
  • 移除標籤頁:chooser.removeChooserPanel(panel) 簡化界面
  • 添加自定義面板:實現 AbstractColorChooserPanel,如 CMYK、Lab 色彩空間
  • 選擇模型:ColorSelectionModel 可分離綁定多個組件同步顏色

色彩管理最佳實踐

  • UI 顏色統一由 UIManager 管理,JColorChooser 僅作運行時臨時調整
  • 持久化用戶偏好:將 Color.getRGB() 存入 Preferences/配置文件,啟動時恢復
  • 無障礙合規:確保前景/背景對比度 ≥ 4.5:1(WCAG AA),可集成對比度檢查提示
  • 高 DPI 適配:JColorChooser 內部圖標在 HiDPI 下可能模糊,JavaFX ColorPicker 原生支持向量圖標
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved