Как изменить цвет на компоненте образцов JColorChooser? - PullRequest
0 голосов
/ 11 мая 2018

Я пытаюсь создать приложение для рисования с использованием компонента JColorChooser Swatches, и я пытаюсь сделать свой интерфейс определенного цвета. Я смог изменить цвет, установив фон почти везде, кроме одной небольшой области вокруг поля «Недавние». Скриншот

Буду признателен за любую помощь, я вставлю часть моего кода ниже для контекста:

 //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);    

1 Ответ

0 голосов
/ 11 мая 2018

Я не думаю, что это можно сделать без какого-либо сложного поиска по дереву JComponent. Но даже я не смог изменить цвет фона.

EDIT: Мне, наконец, удалось изменить цвет фона для последней панели с кодом ниже:

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));
...