• 追加された行はこの色です。
  • 削除された行はこの色です。
#navi(../)
*JTableに行フィルターで表示の切り替え [#defef215]
>編集者:[[Terai Atsuhiro>terai]]~
作成日:2005-01-31~
更新日:&lastmod;
---
category: swing
folder: FilteredTable
title: JTableに行フィルタで表示の切り替え
tags: [JTable, DefaultTableModel]
author: aterai
pubdate: 2005-01-31T07:28:18+09:00
description: JTableに表示する行をフィルタを使用して切り替えます。
image: https://lh5.googleusercontent.com/_9Z4BYR88imo/TQTMpQqDR4I/AAAAAAAAAZg/vitkhyUoKkI/s800/FilteredTable.png
---
* 概要 [#summary]
`JTable`に表示する行をフィルタを使用して切り替えます。

#contents
**概要 [#p22a4681]
JTableに表示する行をフィルタを使用して切り替えます。
#download(https://lh5.googleusercontent.com/_9Z4BYR88imo/TQTMpQqDR4I/AAAAAAAAAZg/vitkhyUoKkI/s800/FilteredTable.png)

http://terai.xrea.jp/swing/filteredtable/screenshot.png
* サンプルコード [#sourcecode]
#code(link){{
class TestModel extends DefaultTableModel {
  public static final String NUMBER = "番号";
  public static final String MASTER = "名前";
  public static final String COMMENT = "コメント";
  private final Vector list = new Vector();

**サンプルコード [#gf3186d0]
 class TestModel extends DefaultTableModel {
   public static final String NUMBER  = "番号";
   public static final String MASTER  = "名前";
   public static final String COMMENT = "コメント";
   private final Vector list = new Vector();
   public TestModel() {
     super(new String[]{NUMBER, MASTER, COMMENT}, 0);
   }
   public void addRow(Test tst) {
     list.add(tst);
     Integer num = new Integer(list.size());
     Object[] obj = {num, tst.getName(), tst.getComment()};
     addRow(obj);
   }
   public void filterRows(boolean flg) {
     //Vector v = new Vector(list.size());
     dataVector.clear();
     for(int i=0;i<list.size();i++) {
       if(flg && !(i%2==0)) continue;
       Test t = (Test)list.elementAt(i);
       Object[] o = new Object[] {
         new Integer(i+1),
         t.getName(),
         t.getComment()
       };
       //v.add(convertToVector(o));
       dataVector.add(convertToVector(o));
     }
     //setDataVector(v, columnIdentifiers);
     fireTableDataChanged();
   }
 }
  public TestModel() {
    super(new String[] {NUMBER, MASTER, COMMENT}, 0);
  }

-[[サンプルを起動>http://terai.xrea.jp/swing/filteredtable/sample.jnlp]]
-[[jarファイル>http://terai.xrea.jp/swing/filteredtable/sample.jar]]
-[[ソース>http://terai.xrea.jp/swing/filteredtable/src.zip]]
  public void addRow(Test tst) {
    list.add(tst);
    Integer num = new Integer(list.size());
    Object[] obj = {num, tst.getName(), tst.getComment()};
    addRow(obj);
  }

**解説 [#j7d85e1f]
DefaultTableModelのフィールドであるdataVectorとは別にVectorで表データをもち、これから条件に合う行データだけをdataVectorにコピーしています。
  public void filterRows(boolean flg) {
    // Vector v = new Vector(list.size());
    dataVector.clear();
    for (int i = 0; i < list.size(); i++) {
      if (flg && i % 2 == 0) continue;
      Test t = (Test) list.elementAt(i);
      Object[] o = {Integer.valueOf(i + 1), t.getName(), t.getComment()};
      // v.add(convertToVector(o));
      dataVector.add(convertToVector(o));
    }
    // setDataVector(v, columnIdentifiers);
    fireTableDataChanged();
  }
}
}}

//**参考リンク
* 解説 [#explanation]
- `DefaultTableModel`のフィールドにある`dataVector`を表示用に使用し、これとは別にすべての行を保持する`Vector`を作成
-- 例えば奇数行だけ表示するという条件が選択された場合、この条件に適合する行だけを保持用`Vector`から表示用の`dataVector`にコピーすることでフィルタリングを実施

**コメント [#edc470ff]
* 参考リンク [#reference]
- [[RowFilterでJTableの行をフィルタリング>Swing/RowFilter]]
-- `JDK 1.6.0`以上の場合、標準で実装されている`TableRowSorter`のフィルタリング機能が使用可能

* コメント [#comment]
#comment
#comment