меня JComboBox где я применяю ListCellRenderer следующим образом:ListCellRenderer, выбранное значение не виден
colorList = new JComboBox<>(COLORS_NAMES);
ColorComboBoxRenderer renderer = new ColorComboBoxRenderer(colorList);
renderer.setColors(COLORS);
renderer.setColorNames(COLORS_NAMES);
colorList.setRenderer(renderer);
это приводит к модифицирующему клеток, но я не могу найти причину, почему выбранное значение запоминается, но не на фото. Как следующее:
Вот мой код для визуализатора (опуская setColors, getColors и т.д ..)
class ColorComboBoxRenderer extends JPanel implements ListCellRenderer{
JPanel textPanel;
JLabel text;
public ColorComboBoxRenderer(JComboBox combo){
textPanel = new JPanel();
textPanel.add(this);
text = new JLabel();
text.setOpaque(true);
text.setFont(combo.getFont());
textPanel.add(text);
}
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected,
boolean cellHasFocus) {
if (isSelected){
list.setSelectionBackground(colors[list.getSelectedIndex()]);
}
else{}
if(colors.length != colorNames.length){
System.out.println("colors.length doesn't match colorNames.length");
return this;
}
else if(colors == null){
System.out.println("Set colors by setColors first.");
return this;
}
else if(colorNames == null){
System.out.println("Set colorNames by setColorNames first.");
return this;
}
text.setText(" ");
if(index > -1){
text.setBackground(colors[index]);
text.setText(" ");
}
return text;
}
}
Что же меня смущает то, что if(isSelected) block
делается каждый раз, когда я указываю курсор на указанную ячейку , но моя интуиция скорее предпочла бы, что это произойдет, когда cellHasFocus
param является истинным.
Спасибо заранее, как я борюсь с ней с 2-х дней;/
EDIT 1
Добавлено JComboBox поле класса ColorComboBoxRenderer и инициализирует его в конструкторе:
private JComboBox comboBox;
public ColorComboBoxRenderer(JComboBox combo) {
this.comboBox = combo;
//rest of code as it was
}
Изменены что:
if(isSelected){
list.setSelectionBackground(colors[list.getSelectedIndex()]);
}
Кому:
if (isSelected){
list.setSelectionBackground(colors[list.getSelectedIndex()]);
comboBox.setBackground(colors[list.getSelectedIndex()]);
}
Результаты в:
Теперь эффект лучше, так что, может быть, и есть идеи, как изменить JComboBox фон, но не влияют на стрелку вниз в списке?