JTableに行フィルターで表示の切り替え

編集者:Terai Atsuhiro
作成日:2005-01-31
更新日:2022-03-19 (土) 11:33:09

概要

JTableに表示する行をフィルタを使用して切り替えます。

http://terai.xrea.jp/swing/filteredtable/screenshot.png

サンプルコード

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();
  }
}

解説

DefaultTableModelのフィールドであるdataVectorとは別にVectorで表データをもち、これから条件に合う行データだけをdataVectorにコピーしています。

コメント