Swing/ResetRowFilter のバックアップ(No.10)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/ResetRowFilter へ行く。
- 1 (2008-11-03 (月) 16:35:24)
- 2 (2010-04-13 (火) 18:48:45)
- 3 (2011-06-30 (木) 15:08:31)
- 4 (2012-10-19 (金) 20:07:36)
- 5 (2013-01-15 (火) 18:04:21)
- 6 (2014-08-13 (水) 20:16:22)
- 7 (2014-11-01 (土) 00:46:09)
- 8 (2014-11-07 (金) 03:13:11)
- 9 (2014-11-29 (土) 01:52:04)
- 10 (2016-02-17 (水) 16:21:03)
- 11 (2016-05-31 (火) 15:10:12)
- 12 (2017-08-31 (木) 13:57:10)
- 13 (2017-11-02 (木) 15:34:40)
- 14 (2018-02-24 (土) 19:51:30)
- 15 (2018-09-16 (日) 22:04:21)
- 16 (2020-09-17 (木) 10:44:42)
- 17 (2022-04-22 (金) 06:29:22)
- 18 (2022-08-20 (土) 22:15:25)
- title: JTableのRowFilterを一旦解除してソート
tags: [JTable, RowFilter, TableRowSorter]
author: aterai
pubdate: 2008-11-03T16:35:24+09:00
description: JTableのRowFilterを一旦解除してソートし、再びフィルタを設定することで表示される行を更新します。
hreflang:
href: http://java-swing-tips.blogspot.com/2009/03/reset-rowfilter-before-sorting.html lang: en
概要
JTable
のRowFilter
を一旦解除してソートし、再びフィルタを設定することで表示される行を更新します。
Screenshot
Advertisement
サンプルコード
final RowFilter<TableModel, Integer> filter = new RowFilter<TableModel, Integer>() {
@Override public boolean include(Entry<? extends TableModel, ? extends Integer> entry) {
int vidx = table.convertRowIndexToView(entry.getIdentifier());
return vidx < USER_SPECIFIED_NUMBER_OF_ROWS;
}
};
final TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model) {
@Override public void toggleSortOrder(int column) {
if (check.isSelected()) {
RowFilter<? super TableModel, ? super Integer> f = getRowFilter();
setRowFilter(null);
super.toggleSortOrder(column);
setRowFilter(f);
} else {
super.toggleSortOrder(column);
}
}
};
table.setRowSorter(sorter);
sorter.setSortKeys(Arrays.asList(new RowSorter.SortKey(1, SortOrder.DESCENDING)));
View in GitHub: Java, Kotlin解説
上記のサンプルでは、☑ viewRowIndex<5
をチェックすると、ソートされていても表示上の0
から4
行目までの5
行のみ表示されるフィルタがかかります。
Costom Sorting
チェック無し- ☑
viewRowIndex<5
のフィルタでAA-ee
が表示されている場合、String
列で昇順から降順にソートするとee-AA
となる
- ☑
Costom Sorting
チェック有り- ☑
viewRowIndex<5
のフィルタでAA-ee
が表示されている場合、String
列で昇順から降順にソートするとOO-KK
となるtoggleSortOrder
メソッドをオーバーライドして、一旦RowFilter
を解除(setRowFilter(null)
)してから昇順から降順にソートOO-KK-AA
、その後再びRowFilter
を設定するのでOO-KK
が表示される
- ☑
以下は、toggleSortOrder
メソッドをオーバーライドし、すべての行が変更されている可能性があることをリスナーに通知してから、もう一度ソートのやり直しを行う方法です。
final TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model) {
@Override public void toggleSortOrder(int column) {
super.toggleSortOrder(column);
if (check.isSelected()) {
model.fireTableDataChanged();
//??? allRowsChanged();
//modelRowCount = getModelWrapper().getRowCount();
sort();
}
}
};
参考リンク
- Specification for the javax.swing.DefaultRowSorter.setSortsOnUpdates/rowsUpdated method is not clear