По умолчанию JLabel
является прозрачным.Если вы хотите, чтобы он отображал фон, вам необходимо:
label.setOpaque(true);
Кроме того, вы часто хотите использовать цвет фона по умолчанию для родительского списка, который будет соответствовать теме пользовательского интерфейса или настройке самого списка.:
if (isSelected) {
label.setForeground(list.getSelectionForeground());
label.setBackground(list.getSelectionBackground());
} else {
label.setForeground(list.getForeground());
label.setBackground(list.getBackground());
}
Собираем все вместе:
import javax.swing.*;
import java.awt.*;
public class CustomListCellRenderer implements ListCellRenderer<MyObject>
{
@Override
public Component getListCellRendererComponent(JList<? extends MyObject> list,
MyObject value,
int index,
boolean isSelected,
boolean cellHasFocus)
{
JLabel label = new JLabel();
label.setOpaque(true);
label.setText(value.getName());
if (isSelected) {
label.setForeground(list.getSelectionForeground());
label.setBackground(list.getSelectionBackground());
} else {
label.setForeground(list.getForeground());
label.setBackground(list.getBackground());
}
return label;
}
}