Le principali questioni su questo codice sono:
- innanzitutto restituisci un nuovo JLabel ad ogni aggiornamento della cella. I renderer "buoni" normalmente giocano molto al "risparmio" e restituiscono sempre la stessa identica istanza del componente. E anzi la classe del renderer generalmente è il componente stesso!
- non tratti per niente i flag isSelected/hasFocus.
Se andassi a sbirciare nel sorgente di DefaultTableCellRenderer scopriresti che già solo questo renderer di "default" fa molte, molte più cose e inoltre sovrascrive "vuoti" una serie di metodi per ragioni di performance.