Скажите, что ячейка, которую вы хотите отобразить другим цветом, представляет состояние (в качестве примера я возьму Отклонено и Одобрено). Затем я реализовал бы метод в моей табличной модели с именем getStatus (int row), который возвращает статус для любой данной строки.
Тогда, когда это будет на месте, я бы начал создавать средство визуализации ячеек, отвечающее за рендеринг столбца, которому принадлежит ячейка. Рендерер ячеек будет что-то в строках кода ниже.
public class StatusColumnCellRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col) {
//Cells are by default rendered as a JLabel.
JLabel l = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col);
//Get the status for the current row.
CustomTableModel tableModel = (CustomTableModel) table.getModel();
if (tableModel.getStatus(row) == CustomTableModel.APPROVED) {
l.setBackground(Color.GREEN);
} else {
l.setBackground(Color.RED);
}
//Return the JLabel which renders the cell.
return l;
}
Затем, когда средство визуализации установлено, просто «примените» средство визуализации к таблице с помощью следующего фрагмента кода:
Table.getColumnModel().getColumn(columnIndex).setCellRenderer(new StatusColumnCellRenderer());
Чтобы сделать ячейку редактируемой, просто реализуйте метод isCellEditable (int rowIndex, int columnIndex) в вашей табличной модели. Вам также необходимо реализовать метод
setValueAt (значение объекта, int rowIndex, int columnIndex), если вы хотите сохранить значение, предоставленное пользователем (что, я полагаю, вы делаете!).