Io ho risolto con una soluzione semplice, che ho utilizzato tante volte... In pratica puoi utilizzare una matrice "parallela" di booleani in cui riporti quale cella colorare... Forse uno snippet è più comprensibile di tante parole:
codice:
Object rowData[][] = new Object[nrRow][nrCol];
boolean redColoring[][] = new boolean[nrRow][nrCol];
String columnNames[] = new String[nrCol];
JTable table = new JTable(rowData, columnNames);
table.setDefaultRenderer(Object.class, new TableCellRenderer() {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column){
JLabel label = new JLabel(value.toString());
label.setOpaque(true);
if (redColoring[row][column]) {
label.setBackground(Color.RED);
}
return label;
}
});
A questo punto ti gestisci il vettore di booleani, alzando o abbassando l'elemento che vuoi colorare. In soldoni, quando si scatena l'evento che aspetti fai un semplice
codice:
redColoring[h][k] = true;
e vedi che la cella (h,k) si colora immediatamente di rosso.