JTable RowFilter отображает неправильные строки

Я использую пользовательский класс, расширяющий RowFilter, для фильтрации моей таблицы на основе логического значения в столбце.

public class MyRowFilter extends RowFilter<Object, Integer> {

    @Override
    public boolean include(Entry entry) {

        return (boolean) entry.getValue(0));
    }
}

Я назначаю его таблице как таковой

TableRowSorter<TableModel> tableRowSorter = new TableRowSorter();
myRowFilter = new MyRowFilter(myTableModel);
tableRowSorter.setRowFilter(myRowFilter);
myTable.setRowSorter(platformTableRowSorter);

Но то, что я получаю в форме, - это только первые N (количество времени, когда include() возвращает true) строк myTable вместо тех, для которых include() возвращает true.

Что может вызвать такое поведение?


person NekoiNemo    schedule 25.12.2014    source источник
comment
Вы уверены, что ваши значения не в правильном порядке? При упорядочении чисел, которые являются строками, строки будут упорядочены в алфавитном порядке, а не в порядке нумерации.   -  person    schedule 25.12.2014
comment
@Desolator их порядок правильный, что не так с отображаемыми строками - только одна из них соответствует фильтру.   -  person NekoiNemo    schedule 25.12.2014
comment
для лучшей помощи скорее опубликуйте SSCCE/MCVE, короткий, исполняемый, компилируемый, с жестко заданным значением для JTable, XxxTableModel в локальной переменной   -  person mKorbel    schedule 25.12.2014


Ответы (2)


import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.RowFilter;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;

public class JTableFilterDemo {
  public static void main(String[] args) {
    Object[][] data = { { "A", 5 }, { "B", 2 }, { "C", 4 }, { "D", 8 } };
    String columnNames[] = { "Item", "Value" };
    TableModel model = new DefaultTableModel(data, columnNames) {
      public Class<?> getColumnClass(int column) {
        return getValueAt(0, column).getClass();
      }
    };
    JTable table = new JTable(model);

    RowFilter<Object, Object> filter = new RowFilter<Object, Object>() {
      public boolean include(Entry entry) {
        Integer population = (Integer) entry.getValue(1);
        return population.intValue() > 3;
      }
    };

    TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model);
    sorter.setRowFilter(filter);
    table.setRowSorter(sorter);
    JScrollPane scrollPane = new JScrollPane(table);
    JFrame frame = new JFrame("Filtering Table");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.add(scrollPane);
    frame.setSize(300, 200);
    frame.setVisible(true);
  }
}

Посмотреть этот код

person Bipil Raut    schedule 25.12.2014

person    schedule
comment
Спасибо! Оказывается, я перепутал индексы строк при рендеринге. - person NekoiNemo; 26.12.2014