概要

JDK 1.6で導入されたRowSorterを使って、JTableをソートした場合、直前の選択状態がどう変化するかテストします。

スクリーンショット

UpdateSelectionOnSort.png

サンプルコード

table.setUpdateSelectionOnSort(true);
View in GitHub: Java, Kotlin

解説

  • UpdateSelectionOnSort
    • ソート後の選択状態はJTable#setUpdateSelectionOnSort(boolean)メソッドで切り替えることが可能
    • setUpdateSelectionOnSort(true)
      • ソート前と「同じ内容の行」が選択された状態になる(デフォルト)
    • setUpdateSelectionOnSort(false)
      • ソート前と「表示上同じ行」が選択された状態になる
  • ClearSelectionOnSort
    • ソート後に選択状態をクリアする場合はTableRowSorter#toggleSortOrder(int)をオーバーライドしたり、以下のようにJTableHeaderMouseListenerを追加してtable.clearSelection()を実行する必要がある
    • チェックなし
      • 選択状態を維持(デフォルト)
    • チェックあり
      • ソート後は選択状態をクリア
      • JDK 1.5などでTableSorter.javaを使用した場合の動作と同じになるように設定する
        table.getTableHeader().addMouseListener(new MouseAdapter() {
          @Override public void mouseClicked(MouseEvent e) {
            if (table.isEditing()) {
              table.getCellEditor().stopCellEditing();
            }
            table.clearSelection();
          }
        });
        

参考リンク

コメント