Проблема в вашем коде, определенно такая:
Object value = getModel().getValueAt(rowIndex , columnIndex);
Индексы, которые вы получаете в обработчиках и слушателях, методы et c в JTable являются индексами представлений и могут использоваться только для индексации Посмотреть. Другими словами, вы должны написать:
Object value = getValueAt(rowIndex , columnIndex); // Use JTable.getValueAt
Вторая проблема: при ссылке на индекс столбца непосредственно в prepareRenderer вы должны использовать индекс представления в этом месте. Скорее всего, вам нужно
if (convertColumnIndexToModel(columnIndex) == 3)
JTable.convertColumnIndexToModel
, чтобы убедиться, что вы используете индекс из модели. Зачем все это нужно, и что такое индекс вида и модельный индекс? Как они связаны? Я дал немного больше объяснений здесь .
Третья проблема: если вы хотите установить цвета и шрифты для строки / ячейки, вам нужно установить их в компоненте, возвращаемом из super.prepareRenderer
, а не на столе. Например:
if (value.equals("Ready")){
component.setForeground(new java.awt.Color(51, 204, 0));
component.setFont(new Font("Tahoma", Font.PLAIN, 48));
}