• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:JTableに行フィルタで表示の切り替え
#navi(../)
#tags()
RIGHT:Posted by &author(aterai); at 2005-01-31
*JTableに行フィルタで表示の切り替え [#defef215]
Posted by [[terai]] at 2005-01-31

#contents

**概要 [#p22a4681]
JTableに表示する行をフィルタを使用して切り替えます。

-&jnlp;
-&jar;
-&zip;

#screenshot
//#screenshot
#ref(http://lh5.ggpht.com/_9Z4BYR88imo/TQTMpQqDR4I/AAAAAAAAAZg/vitkhyUoKkI/s800/FilteredTable.png)

**サンプルコード [#gf3186d0]
#code{{
#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();
  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;
      if(flg && i%2==0) continue;
      Test t = (Test)list.elementAt(i);
      Object[] o = new Object[] {
        Integer.valueOf(i+1),
        t.getName(),
        t.getComment()
      };
      Object[] o = {Integer.valueOf(i+1), t.getName(), t.getComment()};
      //v.add(convertToVector(o));
      dataVector.add(convertToVector(o));
    }
    //setDataVector(v, columnIdentifiers);
    fireTableDataChanged();
  }
}
}}

**解説 [#j7d85e1f]
上記のサンプルでは、DefaultTableModelのフィールドにあるdataVectorを表示用に使用し、これとは別にすべての行を保持するVectorを作成しています。例えば、奇数行だけ表示するという条件が選択された場合、この条件に適合する行だけを保持用Vectorから表示用のdataVectorにコピーすることでフィルタリングを行っています。

Java SE 6 では、標準でフィルタリング機能が実装されているようです([[RowFilterでJTableの行をフィルタリング>Swing/RowFilter]])。

**参考リンク [#t25361fc]
-[[RowFilterでJTableの行をフィルタリング>Swing/RowFilter]]

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