TITLE:RowFilterでJTableの行をフィルタリング

RowFilterでJTableの行をフィルタリング

編集者:Terai Atsuhiro~

作成日:2007-09-03
更新日:2021-05-11 (火) 01:25:32
  • category: swing folder: RowFilter title: RowFilterでJTableの行をフィルタリング tags: [JTable, TableRowSorter, RowFilter] author: aterai pubdate: 2007-09-03T15:45:16+09:00 description: JDK 6で導入されたTableRowSorterにRowFilterを設定して、行のフィルタリングを行います。 image: https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTST-FvjRI/AAAAAAAAAik/ZbU9nuVVCiI/s800/RowFilter.png

概要

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

概要

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

#screenshot

サンプルコード

#spanend
#spandel
final TableRowSorter<TestModel> sorter = new TableRowSorter<TestModel>(model);
#spanend
#spandel
final Set<RowFilter<TestModel,Integer>> filters = new HashSet<RowFilter<TestModel,Integer>>(2);
#spanend
#spandel
final RowFilter<TestModel,Integer> filter1 = new RowFilter<TestModel,Integer>() {
#spanend
  public boolean include(Entry<? extends TestModel, ? extends Integer> entry) {
    TestModel model = entry.getModel();
#spanadd
* サンプルコード [#sourcecode]
#spanend
#spanadd
#code(link){{
#spanend
#spanadd
TableRowSorter<? extends TableModel> sorter = new TableRowSorter<>(model);
#spanend
#spanadd
Collection<RowFilter<? super TestModel, ? super Integer>> filters = new HashSet<>(2);
#spanend
#spanadd
RowFilter<TableModel, Integer> filter1 = new RowFilter<TableModel, Integer>() {
#spanend
  @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();
  }
};
#spandel
final RowFilter<TestModel,Integer> filter2 = new RowFilter<TestModel,Integer>() {
#spanend
  public boolean include(Entry<? extends TestModel, ? extends Integer> entry) {
#spanadd
RowFilter<TableModel, Integer> filter2 = new RowFilter<TableModel, Integer>() {
#spanend
  @Override public boolean include(
      Entry<? extends TableModel, ? extends Integer> entry) {
    return entry.getIdentifier() % 2 == 0;
  }
};
sorter.setRowFilter(RowFilter.andFilter(filters));
//sorter.setRowFilter(filter1);
  • &jnlp;
  • &jar;
  • &zip;

解説

上記のサンプルは、以下のような行フィルタを、antでJTableに適用することができます。
  • コメントが空でない行のみ表示
  • 行番号が偶数の場合のみ表示
    • 行番号はソートされている場合でも、元のモデルのインデックスで判断する

解説

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

コメント

  • (1.6.0_02) modelに要素を追加する前にtable.setRowSorter(sorter);しておかないと、IndexOutOfBoundsException: Invalid range が、モデルへの追加、削除、編集中に別の行クリックなどで発生する? -- terai
  • コメント列の値が空でない行のみ表示
  • 行番号が偶数の場合のみ表示
    • 行番号はソートされている場合でも元のモデルのインデックスで判断する

参考リンク

コメント