Я пытаюсь иметь возможность раскрашивать отдельные ячейки в JTable, но до сих пор мне удалось применить TableCellRenderer ко всему столбцу, что, очевидно, дает сбой. У меня есть собственный JTable:
public class JColorTable extends JTable{
(...)
public void setCellColor(int col, int row, Color newColor) {
getColumnModel().getColumn(col).setCellRenderer(new ColorField(col, row, newColor, background));
repaint();
}
}
ColorField выглядит так:
class ColorField extends DefaultTableCellRenderer {
(...))
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
JLabel l = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if (row == newRow && column == newCol) {
l.setBackground(Color.red);
} else {
l.setBackground(defaultColor);
}
return l;
}
}
Это работает как шарм, когда у меня есть одна цветная ячейка в столбце, но когда я пытаюсь раскрасить другую ячейку в этом столбце, предыдущая удаляется (из-за того, что условие в ColorField не применяется к предыдущему столбцу).
Есть ли способ применить ColorField только к одной ячейке, а не ко всему столбцу? Если да, то как? Боюсь, ничего подходящего не нашел.