The render is unique for column "Name". You are setting Red as foreground color when row is 3 but you dont reset it for others rows, so when painter is called it always paint red.
You have to set red when row is 3 but you also have to reset the original color in other case.
EDITED: Performed version. Now original foreground color is backed up, and super is used to render like others columns.
table.getColumn("Name").setCellRenderer(
new DefaultTableCellRenderer() {
Color originalColor = null;
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
DefaultTableCellRenderer renderer = (DefaultTableCellRenderer) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if (originalColor == null) {
originalColor = getForeground();
}
if (value == null) {
renderer.setText("");
} else {
renderer.setText(value.toString());
}
if (row == 3) {
renderer.setForeground(Color.RED);
} else {
renderer.setForeground(originalColor); // Retore original color
}
return renderer;
}
});
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…