Мне удалось прикрепить фильтр к GraphTable (который расширен от JTable).Я пробовал образец фильтра, который фильтрует все строки, начинающиеся с буквы «А».
final GraphTable<Composite, ?> leftTable =
(GraphTable<Composite, ?>) newMapPanel.getLeft();
final RowSorter<TableModel> sorter =
new TableRowSorter<TableModel>(((JTable)leftTable).getModel());
RowFilter<Object, Object> startsWithAFilter = new RowFilter<Object,Object>() {
public boolean include(Entry<? extends Object, ? extends Object> entry) {
for (int i = entry.getValueCount() - 1; i >= 0; i--) {
if(entry.getValue(i) != null)
{
if (entry.getValue(i).toString().startsWith("A")) {
// The value starts with "A", so do not include it, filter it.
return false;
}
}
}
// None of the columns start with "a"; return true so that this
// entry is shown
return true;
}
};
((DefaultRowSorter<TableModel, Integer>) sorter).setRowFilter(startsWithAFilter);
((JTable)leftTable).setRowSorter(sorter);
((JTable)leftTable).updateUI();
Метод include возвращает false для всех записей, начинающихся с «A», и возвращает true для других.
Но это обновление не отражено в таблице.Ни ((JTable)leftTable).updateUI()
, ни ((JTable)leftTable).revalidate()
не обновляли Таблицу.Я считаю, что это фильтр тех строк из вида.Что я должен сделать, чтобы изменения немедленно отразились в представлении.
Пожалуйста, дайте мне какие-либо указания или предложения?