Ho fatto qualche modifica ed ho ottenuto questo:

codice:
public class AlternateTableCellRender extends DefaultTableCellRenderer {
private ArrayList<Tag> tagsList;
private static final Color MY_BLUE = new Color(204, 204, 255);
private Color oldColor = Color.WHITE;
private Color newColor = MY_BLUE;
public AlternateTableCellRender(ArrayList<Tag> tagsList) {
this.tagsList = tagsList;
}
/**
* Restituisce il render delle celle della tabella.
* @param table la tabella
* @param value il valore nella cella corrente
* @param isSelected <code>true</code> se la cella e' selezionata
* @param hasFocus <code>true</code> se la cella ha il focus
* @param row l'indice della riga
* @param col l'indice della colonna
* @return il componente da mostrare nella tabella nella cella (row, col)
*/
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int col) {
JLabel label = new JLabel(value.toString(), JLabel.CENTER);
label.setFont(new Font("Dialog", Font.PLAIN, 12));
label.setOpaque(true);
label.setForeground(Color.BLACK);
String a = tagsList.get(row).getCategory();
String b = tagsList.get(row == (tagsList.size() - 1) ? row : row + 1).getCategory();
if (a.equals(b)) {
newColor = oldColor;
} else {
newColor = oldColor.equals(MY_BLUE) ? Color.WHITE : MY_BLUE;
}
label.setBackground(newColor);
return label;
}
}
Cosa mi sfugge? :master: