構建一個整合顏色選擇器與即時預覽標籤的 Swing 應用,展示 JColorChooser 的三大選色模式(色板、HSB、RGB)、選色事件監聽、顏色應用於元件前景色,代碼結構清晰,可直接嵌入專案作為顏色設定功能模組。
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);
});
}
}
| 模式頁籤 | 適用場景 | 核心參數 |
|---|---|---|
| Swatches(色板) | 快速選取預定義顏色 | 可自訂 ColorChooserPanel |
| HSB | 設計師習慣:色相、飽和度、亮度 | H: 0-360°, S/B: 0-100% |
| RGB | 開發者習慣:紅綠藍分量 | R/G/B: 0-255 |
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]));
tcc.setPreviewPanel(new MyCustomPreviewPanel()); // 實作 AbstractColorChooserPanel
Color chosen = JColorChooser.showDialog(parent, "選擇顏色", initialColor);
if (chosen != null) { /* 用戶確定 */ } else { /* 用戶取消 */ }
Color.getRGB() 存入資料庫/配置檔,載入時 new Color(rgb)。ChangeListener 監聽 ColorSelectionModel 變更tcc.getSelectionModel()tcc.getColor() 或 model.getSelectedColor()