У меня есть JTable с пользовательским рендерером, который устанавливает значок в ячейке.
myTable.setDefaultRenderer(MyClass.class, new DefaultTableCellRenderer() {
public Component getTableCellRendererComponent(...) {
JLabel label = table.getTableCellRendererComponent(...);
label.setIcon(iconMap.get( object_type );
return label;
}
});
Где iconMap содержит ссылки на различные значки, а object_type - это тип, на основе которого я хочу, чтобы значок отображался рядом с надписью. В результате таблица отображает ячейки в одном из столбцов с иконками, различающимися по типу. Это ожидаемое поведение.
Далее я бы хотел отфильтровать строки по типу, я использую
TableRowSorter<> sorter = new TableRowSorter(myModel);
RowFilter<> filter = new RowFilter<>() {
public boolean include(...) {
if ( expected_type )
return true;
return false;
}
}
sorter.setRowFilter(filter);
myTable.setRowSorter(sorter);
Так что в основном это делается «по книге», ничто не захватывает дух.
Проблема в том, что значки ячеек отображаются, поскольку не было установленного фильтра.
При запуске приложения без фильтрации будут отображаться два столбца с правильным соответствием пары icon-type <-> object-type
| A-type-icon | A-type-object |
| B-type-icon | B-type-object |
| B-type-icon | B-type-object |
| B-type-icon | B-type-object |
Выполнение того же самого с фильтром, который фильтрует объекты A-типа, будет
| A-type-icon | B-type-object |
| B-type-icon | B-type-object |
| B-type-icon | B-type-object |
Похоже, что объекты отображаются в первую очередь, а затем фильтруются.
Что я могу сделать (или что я делаю неправильно) для правильного отображения значков.