Обновление JTable после использования RowFilter - PullRequest
1 голос
/ 02 ноября 2010

Мне удалось прикрепить фильтр к 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() не обновляли Таблицу.Я считаю, что это фильтр тех строк из вида.Что я должен сделать, чтобы изменения немедленно отразились в представлении.

Пожалуйста, дайте мне какие-либо указания или предложения?

...