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: