Swing/ClearSortingState の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/ClearSortingState へ行く。
- Swing/ClearSortingState の差分を削除
--- 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での行ソートを、テーブルヘッダのKBD{Shift}+クリックでクリアします。 image: https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTJF8YbgvI/AAAAAAAAAT0/NDSO1fqmVNw/s800/ClearSortingState.png --- * 概要 [#summary] `JDK 6`で導入された`TableRowSorter`での行ソートを、テーブルヘッダのKBD{Shift}+クリックでクリアします。 #download(https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTJF8YbgvI/AAAAAAAAAT0/NDSO1fqmVNw/s800/ClearSortingState.png) * サンプルコード [#sourcecode] #code(link){{ table.setAutoCreateRowSorter(true); table.getTableHeader().addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { 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()) { EventQueue.invokeLater(new Runnable() { @Override public void run() { sorter.setSortKeys(null); } }); } } }); }} * 解説 [#explanation] 上記のサンプルでは、`TableHeader`をKBD{Shift}キーを押しながらマウスクリックしたときに`TableRowSorter#setSortKeys`メソッドを使ってソートキーを空にすることでソート無しの状態に戻す機能を追加しています。 - 制限: -- ソートキーになっていないカラムヘッダをKBD{Shift}+クリックした場合でもソート状態をクリアする -- ドラッグ&ドロップでの入れ替えは無効化 - ソートキーになっていないカラムヘッダをKBD{Shift}+クリックした場合でもソート状態をクリアしてしまう - ドラッグ&ドロップでの入れ替えは無効化する必要がある * 参考リンク [#reference] - [https://docs.oracle.com/javase/tutorial/uiswing/examples/components/TableSorterDemoProject/src/components/TableSorter.java TableSorter.java] - [[TableRowSorterでJTableのソート>Swing/TableRowSorter]] - [[TableRowSorterのソートをヘッダクリックで昇順、降順、初期状態に変更>Swing/TriStateSorting]] * コメント [#comment] #comment #comment