概要

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

サンプルコード

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);
view all

解説

上記のサンプルでは、TableRowSorter#toggleSortOrder(int)をオーバーライドして、クリックした列がソートの第一キーで、ソート順序がDESCENDINGの場合、ソートキーをクリアしています。このため、同じカラムヘッダを連続して三回クリックすると、昇順(ASCENDING)、降順(DESCENDING)、初期状態(UNSORTED)と遷移して元に戻るようになっています。

参考リンク

コメント

  • スクリーンショットを更新 -- aterai