TITLE:TableRowSorterのソートをヘッダクリックで昇順、降順、初期状態に変更
#navi(../)
*TableRowSorterのソートをヘッダクリックで昇順、降順、初期状態に変更 [#qcd17147]
Posted by [[terai]] at 2008-09-15

#contents

**概要 [#ae4e1a55]
JDK 6 で導入された TableRowSorter のソートを、TableSorter.java のようにヘッダクリックで昇順、降順、初期状態に切り替わるように設定します。

-&jnlp;
-&jar;
-&zip;

#screenshot

**サンプルコード [#l29c9a20]
#code{{
TestModel model = new TestModel();
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()) {
        SortKey sortKey = keys.get(0);
        if(sortKey.getColumn()==column && sortKey.getSortOrder()==SortOrder.DESCENDING) {
          setSortKeys(null);
          return;
        }
      }
    }
    super.toggleSortOrder(column);
  }
};
table.setRowSorter(sorter);
}}

**解説 [#lc89320d]
上記のサンプルでは、TableRowSorter#toggleSortOrder(int) をオーバーライドして、クリックした列がソートの第一キーで、ソート順序が DESCENDING の場合、ソートキーをクリアすることで昇順(ASCENDING)、降順(DESCENDING)、初期状態(UNSORTED)と遷移しているように見せかけています。

**参考リンク [#qf7f31ba]
-[[TableRowSorterでJTableのソート>Swing/TableRowSorter]]
-[[TableRowSorterのSortKeysをクリアする>Swing/ClearSortingState]]

**コメント [#s4c0fcaa]
#comment