JTableに行フィルタで表示の切り替え
Total: 15014, Today: 2, Yesterday: 1
Posted by aterai at 
Last-modified: 
Summary
JTableに表示する行をフィルタを使用して切り替えます。
Screenshot

Advertisement
Source Code Examples
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 = {Integer.valueOf(i + 1), t.getName(), t.getComment()};
      // v.add(convertToVector(o));
      dataVector.add(convertToVector(o));
    }
    // setDataVector(v, columnIdentifiers);
    fireTableDataChanged();
  }
}
View in GitHub: Java, KotlinDescription
DefaultTableModelのフィールドにあるdataVectorを表示用に使用し、これとは別にすべての行を保持するVectorを作成- 例えば奇数行だけ表示するという条件が選択された場合、この条件に適合する行だけを保持用
Vectorから表示用のdataVectorにコピーすることでフィルタリングを実施 
- 例えば奇数行だけ表示するという条件が選択された場合、この条件に適合する行だけを保持用
 
Reference
- RowFilterでJTableの行をフィルタリング
JDK 1.6.0以上の場合、標準で実装されているTableRowSorterのフィルタリング機能が使用可能