Я создал простой JTable
с моим пользовательским DefaultTableCellRenderer
.Сам по себе он работает нормально (окраска последней колонки).Но как только я выберу строку ИЛИ отфильтрую / отфильтрую ее, строка будет окрашена, даже если она вообще не должна быть цветной.
Мой рендер:
public class StatusCellRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
int row, int col) {
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus,
table.convertRowIndexToModel(row), col);
DataTableModel model = (DataTableModel) table.getModel();
String data = model.getValueAt(table.convertRowIndexToModel(row), col).toString();
if (col == 3 && data.equalsIgnoreCase("successful") && !data.isEmpty()) {
c.setBackground(Color.GREEN);
}
if (col == 3 && !data.equalsIgnoreCase("successful") && !data.isEmpty()) {
c.setBackground(new Color(255, 51, 51));
}
return c;
}
}
Как этоИзначально выглядит (и как это всегда должно выглядеть):
![enter image description here](https://i.stack.imgur.com/eVCpF.png)
И после выбора 2 строк (верхней и нижней):
![enter image description here](https://i.stack.imgur.com/kwQMh.png)
Как видите, есть несколько рядов ЗЕЛЕНЫХ, которые вообще не должны быть окрашены.Еще более тревожным является тот факт, что я выбрал только верхний и нижний ряд зеленого блока, что означает, что он автоматически также окрашивает строки между ними.
Как я могу остановить это поведение и толькоцвет строк, как показано на первом рисунке?
Принятый ответ очень помог мне преодолеть проблемы, и вот окончательный код:
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
int row, int col) {
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus,
table.convertRowIndexToModel(row), table.convertColumnIndexToModel(col));
DataTableModel model = (DataTableModel) table.getModel();
String data = model.getValueAt(table.convertRowIndexToModel(row), table.convertColumnIndexToModel(col))
.toString();
if (!isSelected) {
if (col == 3 && data.equalsIgnoreCase("successful") && !data.isEmpty()) {
c.setBackground(Color.GREEN);
} else if (col == 3 && !data.equalsIgnoreCase("successful") && !data.isEmpty()) {
c.setBackground(new Color(255, 51, 51));
} else {
c.setBackground(Color.WHITE);
}
} else {
c.setBackground(c.getBackground());
}
return c;
}
Этосиний цвет, если ячейка выбрана, а если нет, то цвет БЕЛЫЙ, ЗЕЛЕНЫЙ или КРАСНЫЙ в зависимости от значения