Swing/FilteredTable のバックアップの現在との差分(No.5)
JTableに行フィルターで表示の切り替え
編集者:Terai Atsuhiro~
作成日:2005-01-31
更新日:2022-03-19 (土) 11:33:09
概要
JTable
に表示する行をフィルタを使用して切り替えます。
概要
JTableに表示する行をフィルタを使用して切り替えます。Screenshot
Advertisement
サンプルコード
#spanend
#spanadd
class TestModel extends DefaultTableModel {
#spanend
public static final String NUMBER = "番号";
public static final String MASTER = "名前";
public static final String COMMENT = "コメント";
private final Vector list = new Vector();
#spandel
**サンプルコード [#gf3186d0]
#spanend
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);
}
#spandel
**解説 [#j7d85e1f]
#spanend
#spandel
DefaultTableModelのフィールドであるdataVectorとは別にVectorで表データをもち、これから条件に合う行データだけをdataVectorにコピーしています。
#spanend
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();
}
#spanadd
}
#spanend
#spanadd
View in GitHub: Java, Kotlin解説
-
DefaultTableModel
のフィールドにあるdataVector
を表示用に使用し、これとは別にすべての行を保持するVector
を作成- 例えば奇数行だけ表示するという条件が選択された場合、この条件に適合する行だけを保持用
Vector
から表示用のdataVector
にコピーすることでフィルタリングを実施
- 例えば奇数行だけ表示するという条件が選択された場合、この条件に適合する行だけを保持用
コメント
参考リンク
- RowFilterでJTableの行をフィルタリング
-
JDK 1.6.0
以上の場合、標準で実装されているTableRowSorter
のフィルタリング機能が使用可能
-