概要

JDK 6で導入されたTableRowSorterRowFilterを設定して、行のフィルタリングを行います。

サンプルコード

TableRowSorter<? extends TableModel> sorter = new TableRowSorter<>(model);
Collection<RowFilter<? super TestModel, ? super Integer>> filters = new HashSet<>(2);
RowFilter<TableModel, Integer> filter1 = new RowFilter<TableModel, Integer>() {
  @Override public boolean include(
      Entry<? extends TableModel, ? extends Integer> entry) {
    TableModel model = entry.getModel();
    Test t = model.getTest(entry.getIdentifier());
    return !t.getComment().trim().isEmpty();
  }
};
RowFilter<TableModel, Integer> filter2 = new RowFilter<TableModel, Integer>() {
  @Override public boolean include(
      Entry<? extends TableModel, ? extends Integer> entry) {
    return entry.getIdentifier() % 2 == 0;
  }
};
sorter.setRowFilter(RowFilter.andFilter(filters));
//sorter.setRowFilter(filter1);
View in GitHub: Java, Kotlin

解説

上記のサンプルは、以下のような複数の行フィルタをand条件でJTableに適用しています。

  • コメント列の値が空でない行のみ表示
  • 行番号が偶数の場合のみ表示
    • 行番号はソートされている場合でも元のモデルのインデックスで判断する

参考リンク

コメント