如何更改 JColorChooser 的 Swatches 组件的颜色?

Posted

技术标签:

【中文标题】如何更改 JColorChooser 的 Swatches 组件的颜色?【英文标题】:How Do You Change The Color on The Swatches Component of JColorChooser? 【发布时间】:2018-10-21 07:20:12 【问题描述】:

我正在尝试制作一个涉及 JColorChooser Swatches 组件的绘图应用程序,并且我正在尝试使我的 UI 具有某种颜色。除了“最近”框周围的一小块区域外,我几乎可以通过在所有地方设置背景来更改颜色。 Screenshot

任何帮助将不胜感激,我将在下面粘贴部分代码以获取上下文:

 //Sets up color chooser
  chooser = new JColorChooser(Color.BLACK);
  AbstractColorChooserPanel[] panels = chooser.getChooserPanels();
  for (int i = 0; i < panels.length; i++) 
     if (!panels[i].getDisplayName().equalsIgnoreCase("Swatches"))
         chooser.removeChooserPanel(panels[i]);
     else 
        panels[i].setBackground(new Color(0, 155, 228));
     
  
  chooser.setPreviewPanel(new JPanel());
  //Sets up size slider
  sizeSlide = new JSlider(1, 45);

  //Adds Color/Size to one control panel, adds new panel to bottom of 
  //main
  optionP = new JPanel();
  optionP.setBackground(new Color(0, 155, 228));
  optionP.setLayout(new BorderLayout());
  optionP.add(sizeSlide, BorderLayout.EAST);
  optionP.add(chooser, BorderLayout.WEST);
  this.add(optionP, BorderLayout.SOUTH);    

【问题讨论】:

JColorChooser: Save/restore recent colors in Swatches panel的可能重复 【参考方案1】:

我认为如果不对 JComponent 树进行一些复杂的搜索,就无法做到这一点。但即使我无法更改背景颜色。

编辑: 我终于设法使用以下代码更改了最近面板的背景颜色:

JColorChooser chooser = new JColorChooser(Color.BLACK);
AbstractColorChooserPanel[] panels = chooser.getChooserPanels();
for (int i = 0; i < panels.length; i++) 
    if (!panels[i].getDisplayName().equalsIgnoreCase("Swatches")) 
        chooser.removeChooserPanel(panels[i]);
     else 
        panels[i].setBackground(new Color(0, 155, 228));
        // placing code to change recent panel background color here
        // will not work for some odd reason
        // JComponent component = (JComponent) panels[i].getComponent(0);
        // component.setBackground(new Color(0, 155, 228));
    

AbstractColorChooserPanel panel = chooser.getChooserPanels()[0];
JComponent component = (JComponent) panel.getComponent(0);
component.setBackground(new Color(0, 155, 228));

另一种方法有效,但它会改变应用程序中所有面板的背景。使用 UIManager 改变背景:

UIManager.put("Panel.background", new ColorUIResource(0, 155, 228));

【讨论】:

以上是关于如何更改 JColorChooser 的 Swatches 组件的颜色?的主要内容,如果未能解决你的问题,请参考以下文章

如何覆盖 JColorChooser 重置按钮?

如何从 JColorChooser 获取颜色窗格并在我自己的窗口中使用它?

仅 RGB 的 JColorChooser (Java 7)

JColorChooser 中的异常行为(或可能的错误)

使用 JColorChooser 绘图

Java Swing JColorChooser 颜色 RGB 到 sRGB