Para poner un color permanente a una celda específica en una JList, puedes crear un modelo de lista personalizado que extienda DefaultListModel y anular el método getListCellRendererComponent para devolver un componente de celda personalizado que tenga un color de fondo diferente para la celda deseada. Aquí hay un ejemplo de cómo hacerlo:
import java.awt.Color;
import java.awt.Component;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.ListCellRenderer;
public class ColoredJListDemo
extends JFrame {
private static final long serialVersionUID = 1L;
public ColoredJListDemo() {
setDefaultCloseOperation
(JFrame.
EXIT_ON_CLOSE); setTitle("Colored JList Demo");
// Crea un modelo de lista personalizado con algunos datos de ejemplo
DefaultListModel<String> model = new DefaultListModel<String>();
model.addElement("Item 1");
model.addElement("Item 2");
model.addElement("Item 3");
// Crea una lista personalizada que use el modelo personalizado y el renderizador personalizado
JList<String> list = new JList<String>(model);
list.
setCellRenderer(new ColoredListCellRenderer
(1,
Color.
YELLOW)); // La celda 1 se muestra con un color de fondo amarillo
// Agrega la lista a un panel de desplazamiento y lo agrega al marco
getContentPane().add(scrollPane);
// Establece el tamaño y la posición del marco y lo muestra
setSize(200, 200);
setLocationRelativeTo(null);
setVisible(true);
}
// Renderizador personalizado que establece el color de fondo de una celda específica
private static class ColoredListCellRenderer implements ListCellRenderer<String> {
private int targetIndex;
private Color backgroundColor
;
public ColoredListCellRenderer
(int targetIndex,
Color backgroundColor
) { this.targetIndex = targetIndex;
this.backgroundColor = backgroundColor;
}
@Override
public Component getListCellRendererComponent
(JList
<? extends String
> list,
String value,
int index,
boolean isSelected, boolean cellHasFocus) {
Component component
= list.
getCellRenderer().
getListCellRendererComponent(list, value, index, isSelected,
cellHasFocus);
if (index == targetIndex) {
component.setBackground(backgroundColor);
}
return component;
}
}
public static void main
(String[] args
) { new ColoredJListDemo();
}
}
En este ejemplo, el método getListCellRendererComponent devuelve el componente de celda predeterminado obtenido a través de list.getCellRenderer().getListCellRendererComponent y establece el color de fondo en backgroundColor si la celda actual es la celda objetivo (índice 1 en este caso). Luego, agrega el componente de celda modificado al modelo de lista personalizado para su uso en la lista.