p0ll0_ ha scritto:
volevo fare in modo che se è scaduto diventa rosso. Quando si apre la tabella è tutto nero ma scorrendo appena trova una data scaduta diventa tutto rosso, tutte le colonne...
Sì ma devi capire il perché. I renderer delle celle possono essere associati ad un Class specifico (quello esposto dal table model) o ad una colonna
x specifica. Non so ora che table model hai usato ma è possibile/probabile che esponga Object.class per tutte le colonne. In questa condizione, c'è un unico renderer per tutte le colonne e quindi per l'intera tabella!
Un renderer tipicamente restituisce sempre lo stesso identico componente. Non solo: tipicamente il renderer stesso
è il componente, nel senso che generalmente si definisce es.: class MyRenderer extends JLabel { .... }
E il getTableCellRendererComponent restituisce semplicemente la istanza dell'oggetto renderer (ovvero sé stesso, il
this), previo setup del componente, naturalmente. Tutto questo è stato fatto così semplicemente per "giocare" moltissimo sul risparmio degli oggetti, per non dover creare decine/centinaia di oggetti continuamente.
In uno scenario come questo succede quello che hai descritto. Purtroppo non è facile spiegarlo meglio, dovresti dare una occhiata al sorgente di DefaultTableCellRenderer per avere una idea della logica che c'è dietro.
Le soluzioni ci sono, più di una. O fai in modo che qualunque sia il "flusso" del tuo prepareRenderer (ovvero in qualunque ramo passa) alla fine imposti sempre un foreground, rosso in quel caso specifico, nero in
qualunque altro.
Oppure per fare la cosa più accurata, prendere una prima volta il foreground dal componente per settarlo subito all'inizio
prima della tua logica nel prepareRenderer.