TITLE:TableRowSorterのSortKeysをクリアする

TableRowSorterのSortKeysをクリアする

編集者:Terai Atsuhiro~

作成日:2007-08-27
更新日:2021-11-25 (木) 05:39:17
  • category: swing folder: ClearSortingState title: TableRowSorterのSortKeysをクリアする tags: [JTable, TableRowSorter, JTableHeader, MouseListener] author: aterai pubdate: 2007-08-27T12:33:13+09:00 description: JDK 6で導入されたTableRowSorterでの行ソートを、テーブルヘッダのShift+クリックでクリアします。 image: https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTJF8YbgvI/AAAAAAAAAT0/NDSO1fqmVNw/s800/ClearSortingState.png

概要

JDK 6で導入されたTableRowSorterでの行ソートを、テーブルヘッダのShift+クリックでクリアします。

概要

JDK 6 で導入されたTableRowSorterでの行ソートを、テーブルヘッダの「Shift+クリック」でクリアします。

#screenshot

サンプルコード

#spanend
#spandel
final TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model);
#spanend
#spandel
table.setRowSorter(sorter);
#spanend
#spandel
table.getTableHeader().addMouseListener(new MouseAdapter {
#spanend
#spanadd
* サンプルコード [#sourcecode]
#spanend
#spanadd
#code(link){{
#spanend
#spanadd
table.setAutoCreateRowSorter(true);
#spanend
#spanadd
table.getTableHeader().addMouseListener(new MouseAdapter() {
#spanend
  @Override public void mouseClicked(MouseEvent e) {
    JTableHeader h = (JTableHeader) e.getSource();
    final RowSorter<? extends TableModel> sorter = table.getRowSorter();
    if (sorter == null || sorter.getSortKeys().isEmpty()) {
      return;
    }
    JTableHeader h = (JTableHeader) e.getComponent();
    TableColumnModel columnModel = h.getColumnModel();
    int viewColumn = columnModel.getColumnIndexAtX(e.getX());
    if (viewColumn < 0) {
      return;
    }
    int column = columnModel.getColumn(viewColumn).getModelIndex();
    if(column != -1 && e.isShiftDown()) {
      sorter.setSortKeys(null);
    if (column != -1 && e.isShiftDown()) {
      EventQueue.invokeLater(new Runnable() {
        @Override public void run() {
          sorter.setSortKeys(null);
        }
      });
    }
  }
});
  • &jnlp;
  • &jar;
  • &zip;

解説

ヘッダにマウスリスナーを設定し、Shiftキーを押しながらのクリックの場合は、TableRowSorter#setSortKeysメソッドを使って、ソートキーを空にしています。

解説

上記のサンプルでは、TableHeaderShiftキーを押しながらマウスクリックしたときにTableRowSorter#setSortKeysメソッドを使ってソートキーを空にすることでソート無しの状態に戻す機能を追加しています。 上記のサンプルでは、以下のような制限があります。
  • ソートキーになっていないヘッダカラムをShift+クリックした場合でも、ソート状態をクリアする
  • 行がソートされている場合は、ドラッグ&ドロップで行を入れ替え不可
  • ソートキーになっていないカラムヘッダをShift+クリックした場合でもソート状態をクリアしてしまう
  • ドラッグ&ドロップでの入れ替えは無効化する必要がある

コメント

参考リンク

コメント