Код свинга, который вызывает getListCellRendererComponent
, затем вызывает setForeground
и setBackground
на возвращенном компоненте (в зависимости от того, выбран ли компонент и / или находится ли он в фокусе).Я предполагаю, что это для некоторого унаследованного поведения.К сожалению, это побеждает цель моей установки в рендерере.
У меня были некоторые хорошие результаты с этим подходом:
Код ниже обходит изменение переднего плана и фона путем переопределения fg/ bg setters ничего не делает, затем я просто вызываю супер реализации, чтобы установить нужные мне цвета.
public static class CustomRenderer extends DefaultListCellRenderer {
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
super.getListCellRendererComponent(list, value, index, isSelected,
cellHasFocus);
super.setBackground(Color.WHITE);
super.setForeground(Color.BLACK);
return this;
}
public void setForeground(Color c) {}
public void setBackground(Color c) {}
}
Приложение: Серая граница, вероятно, это просто граница.Попробуйте тот же подход, но также переопределите setBorder
.