TITLE:JTableをソートした後の選択状態

Posted by at 2008-03-24

JTableをソートした後の選択状態

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

  • &jnlp;
  • &jar;
  • &zip;
UpdateSelectionOnSort.png

サンプルコード

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

解説

  • `UpdateSelectionOnSort`
    • ソート後の選択状態は、`JTable#setUpdateSelectionOnSort`メソッドで切り替えることが出来ます。
    • `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) { //mousePressed(MouseEvent e) {
    if(table.isEditing()) table.getCellEditor().stopCellEditing();
    table.clearSelection();
  }
});

コメント