• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:RowFilterでJTableの行をフィルタリング
#navi(../)
*RowFilterでJTableの行をフィルタリング [#k5e18a60]
>編集者:[[Terai Atsuhiro>terai]]~
作成日:2007-09-03~
更新日:&lastmod;

#contents

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

#screenshot

**サンプルコード [#n69c6a49]
#code{{
final TableRowSorter<TestModel> sorter = new TableRowSorter<TestModel>(model);
final Set<RowFilter<TestModel,Integer>> filters = new HashSet<RowFilter<TestModel,Integer>>(2);
final RowFilter<TestModel,Integer> filter1 = new RowFilter<TestModel,Integer>() {
  public boolean include(Entry<? extends TestModel, ? extends Integer> entry) {
    TestModel model = entry.getModel();
    Test t = model.getTest(entry.getIdentifier());
    return !t.getComment().trim().isEmpty();
  }
};
final RowFilter<TestModel,Integer> filter2 = new RowFilter<TestModel,Integer>() {
  public boolean include(Entry<? extends TestModel, ? extends Integer> entry) {
    return entry.getIdentifier() % 2 == 0;
  }
};
sorter.setRowFilter(RowFilter.andFilter(filters));
//sorter.setRowFilter(filter1);
}}
-&jnlp;
-&jar;
-&zip;

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

//**参考リンク
**コメント [#p94b744a]
- (1.6.0_02) modelに要素を追加する前にtable.setRowSorter(sorter);しておかないと、IndexOutOfBoundsException: Invalid range が、モデルへの追加、削除、編集中に別の行クリックなどで発生する? -- [[terai]] &new{2007-09-03 (月) 15:45:16};

#comment