Swing/TriStateSorting のバックアップソース(No.12)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- バックアップ を表示
- Swing/TriStateSorting へ行く。
- 1 (2008-09-15 (月) 17:36:51)
- 2 (2008-09-16 (火) 13:50:35)
- 3 (2008-09-25 (木) 14:23:27)
- 4 (2010-11-09 (火) 18:03:00)
- 5 (2013-01-17 (木) 15:18:32)
- 6 (2014-03-18 (火) 18:41:07)
- 7 (2014-10-14 (火) 13:47:03)
- 8 (2014-11-28 (金) 16:28:17)
- 9 (2016-01-12 (火) 17:59:23)
- 10 (2017-06-27 (火) 13:56:04)
- 11 (2017-11-07 (火) 18:11:59)
- 12 (2018-02-24 (土) 19:51:30)
- 13 (2020-01-29 (水) 18:49:20)
- 14 (2021-07-24 (土) 23:34:29)
--- category: swing folder: TriStateSorting title: TableRowSorterのソートをヘッダクリックで昇順、降順、初期状態に変更 tags: [JTable, TableRowSorter] author: aterai pubdate: 2008-09-15T17:36:51+09:00 description: JDK 6で導入されたTableRowSorterのソートを、TableSorter.javaのようにヘッダクリックで昇順、降順、初期状態に切り替わるように設定します。 image: https://lh4.googleusercontent.com/_9Z4BYR88imo/TQTWVWrGvdI/AAAAAAAAApE/-DL1kAZzGsM/s800/TriStateSorting.png hreflang: href: http://java-swing-tips.blogspot.com/2008/09/jdk6-cycle-through-ascending-descending.html lang: en --- * 概要 [#summary] `JDK 6`で導入された`TableRowSorter`のソートを、`TableSorter.java`のようにヘッダクリックで昇順、降順、初期状態に切り替わるように設定します。 #download(https://lh4.googleusercontent.com/_9Z4BYR88imo/TQTWVWrGvdI/AAAAAAAAApE/-DL1kAZzGsM/s800/TriStateSorting.png) * サンプルコード [#sourcecode] #code(link){{ TableModel model = makeTestTableModel(); JTable table = new JTable(model); TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model) { @Override public void toggleSortOrder(int column) { if (column >= 0 && column < getModelWrapper().getColumnCount() && isSortable(column)) { List<SortKey> keys = new ArrayList<>(getSortKeys()); if (!keys.isEmpty()) { SortKey sortKey = keys.get(0); if (sortKey.getColumn() == column && sortKey.getSortOrder() == SortOrder.DESCENDING) { setSortKeys(null); return; } } } super.toggleSortOrder(column); } }; table.setRowSorter(sorter); }} * 解説 [#explanation] 上記のサンプルでは、`TableRowSorter#toggleSortOrder(int)`メソッドをオーバーライドして、クリックした列がソートの第`1`キー、かつソート順序が`DESCENDING`の場合、ソートキーをクリアしています。このため、同じカラムヘッダを連続して`3`回クリックすると、昇順(`ASCENDING`)、降順(`DESCENDING`)、初期状態(`UNSORTED`)と遷移して元の状態に戻ります。 * 参考リンク [#reference] - [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/DefaultRowSorter.html#toggleSortOrder-int- DefaultRowSorter#toggleSortOrder(int) (Java Platform SE 8)] - [[TableRowSorterでJTableのソート>Swing/TableRowSorter]] - [[TableRowSorterのSortKeysをクリアする>Swing/ClearSortingState]] - [https://java-swing-tips.blogspot.jp/2017/08/apply-sort-order-cycle-with-ascending.html Java Swing Tips: Apply sort order cycle with ascending, descending, and unsorted in TableRowSorter with multi-key sorting] -- `setSortKeys(null)`ですべてのソートキーをクリアするのではなく、他のソートキーは維持したまま昇順、降順、初期状態を遷移するサンプル(ssrさんがメールで投稿) * コメント [#comment] #comment - スクリーンショットを更新 -- &user(aterai); &new{2008-09-25 (木) 14:23:27}; #comment