Swing/TriStateSorting のバックアップの現在との差分(No.2)
TITLE:TableRowSorterのソートをヘッダクリックで昇順、降順、初期状態に変更
TableRowSorterのソートをヘッダクリックで昇順、降順、初期状態に変更
Posted by terai at 2008-09-15-
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:
hreflang:
href: https://java-swing-tips.blogspot.com/2008/09/jdk6-cycle-through-ascending-descending.html lang: en
概要
JDK 6
で導入されたTableRowSorter
のソートを、TableSorter.java
のようにヘッダクリックで昇順、降順、初期状態に切り替わるように設定します。
Screenshot
Advertisement
概要
JDK 6 で導入された TableRowSorter のソートを、TableSorter.java のようにヘッダクリックで昇順、降順、初期状態に切り替わるように設定します。- &jnlp;
- &jar;
- &zip;
#screenshot
サンプルコード
#spanend
#spandel
TestModel model = new TestModel();
#spanend
#spanadd
* サンプルコード [#sourcecode]
#spanend
#spanadd
#code(link){{
#spanend
#spanadd
TableModel model = makeTestTableModel();
#spanend
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<SortKey>(getSortKeys());
if(!keys.isEmpty()) {
@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) {
if (sortKey.getColumn() == column && sortKey.getSortOrder() == SortOrder.DESCENDING) {
setSortKeys(null);
return;
}
}
}
super.toggleSortOrder(column);
}
};
table.setRowSorter(sorter);
解説
上記のサンプルでは、TableRowSorter#toggleSortOrder(int) をオーバーライドして、クリックした列がソートの第一キーで、ソート順序が DESCENDING の場合、ソートキーをクリアすることで昇順(ASCENDING)、降順(DESCENDING)、初期状態(UNSORTED)と遷移しているように見せかけています。解説
上記のサンプルでは、TableRowSorter#toggleSortOrder(int)
メソッドをオーバーライドして、クリックした列がソートの第1
キー、かつソート順序がDESCENDING
の場合はソートキーをクリアしています。このため同じカラムヘッダを連続して3
回クリックすると昇順(ASCENDING
)、降順(DESCENDING
)、初期状態(UNSORTED
)と遷移して元の状態に戻ります。
参考リンク
参考リンク
- DefaultRowSorter#toggleSortOrder(int) (Java Platform SE 8)
- TableRowSorterでJTableのソート
- TableRowSorterのSortKeysをクリアする
- Java Swing Tips: Apply sort order cycle with ascending, descending, and unsorted in TableRowSorter with multi-key sorting
-
setSortKeys(null)
ですべてのソートキーをクリアするのではなく、他のソートキーは維持したまま昇順、降順、初期状態を遷移するサンプル(ssrさんがメールで投稿)
-