Как изменить цвет на компоненте образцов JColorChooser?
Я пытаюсь создать приложение для рисования с использованием компонента Swatches JColorChooser, и я пытаюсь сделать свой интерфейс определенного цвета. Я смог изменить цвет, установив фон почти везде, кроме одной небольшой области вокруг поля "Недавние". Скриншот
Любая помощь будет оценена, я вставлю часть моего кода ниже для контекста:
//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 ответ
Решение
Я не думаю, что это можно сделать без какого-либо сложного поиска по дереву 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));