頂部標簽區顯示大號廣告語,背景色固定藍色,前景色跟隨用戶在 JColorChooser 中的選擇即時變化。支持三種標籤頁:色板、HSB、RGB。
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);
});
}
}
| 標籤頁 | 對應選擇器類 | 適用場景 |
|---|---|---|
| 色板 | AbstractColorChooserPanel 子類 | 快速挑選常用顏色,支持自定義色板 |
| HSB | HSBColorChooserPanel | 按色相/飽和度/亮度直觀調整,設計師偏好 |
| RGB | RGBColorChooserPanel | 精確輸入 0-255 數值,程序員/美術協作 |
JColorChooser.showDialog(parent, title, initialColor) 返回選中 Color 或 null(取消)chooser.setPreviewPanel(new JPanel()) 自定義預覽組件chooser.removeChooserPanel(panel) 簡化界面AbstractColorChooserPanel,如 CMYK、Lab 色彩空間ColorSelectionModel 可分離綁定多個組件同步顏色UIManager 管理,JColorChooser 僅作運行時臨時調整Color.getRGB() 存入 Preferences/配置文件,啟動時恢復JColorChooser 內部圖標在 HiDPI 下可能模糊,JavaFX ColorPicker 原生支持向量圖標