Случайное поведение Java TableCellRendererJAVA

Программисты JAVA общаются здесь
Anonymous
Случайное поведение Java TableCellRenderer

Сообщение Anonymous »

Я хочу реализовать TableCellRenderer, который меняет цвет фона ячейки на красный в случае, если имя файла, содержащееся в этой ячейке, не найдено в определенной папке.
Поэтому я написал этот TableCellRenderer:

Код: Выделить всё

public class FileExistsRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

if (value != null) {
if (value instanceof String) {
String id = (String) value;

if (!id.startsWith("ER")) {
return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
}

String folder = "/some/folder";
File file = new File(folder, id + ".pdf");

if (!file.exists()) {
cell.setBackground(Color.red);
} else {
// WTF
}
} else {
throw new IllegalArgumentException("Value is no String!");
}
} else {
throw new IllegalArgumentException("Value is NULL!");
}

return cell;
}
}
Проблема в том, что этот код ведет себя абсолютно случайно и абсурдно:
  • В случае, если предложение else «файл не существует», все ячейки после первой красной ячейки также красные, даже если этот код не меняет цвет фона.
  • В случае, если я поместите cell.setBackground(null); или cell.setBackground(Color.white); там текущая отмеченная ячейка меняет цвет переднего плана на белый, когда строка выбрана, и, таким образом, значение исчезает (он возвращается к нормальному состоянию, если он больше не выбран).
  • Если я устанавливаю цвет фона на белый или нулевой, а цвет переднего плана на черный, то, когда строка выбрана, эта единственная ячейка не становится синим, в отличие от остальной части строки.
Также во всех случаях, когда при щелчке по таблице и выборе строк (таблица одиночная) только выбор строки), затем иногда красный фон исчезает, иногда он появляется в ячейках, которые вообще не должны быть помечены красным, а иногда ячейки помечаются красным, значения которых не начинаются с «ER».По сути, поведение делает все, что указано в коде.
Я использую Java 8 SE.
Есть ли исправление этой ошибки? Или будет ли доступна какая-либо другая реализация таблицы (не JTable), которая не содержит ошибок и может быть легко интегрирована?

Подробнее здесь: https://stackoverflow.com/questions/784 ... -behaviour

Вернуться в «JAVA»