У меня есть 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);
Так что в основном это делается «по правилам», ничего захватывающего дух.
Проблема в том, что значки ячеек отображаются, так как фильтр не установлен.
Запуск приложения без фильтрации отобразит два столбца с правильным соответствием пары тип значка ‹-> тип объекта.
| 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 |
Похоже, объекты сначала визуализируются, а затем фильтруются. Что я могу сделать (или что я делаю неправильно), чтобы иконки отображались правильно.