• title: JTableをソートした後の選択状態 tags: [JTable, TableRowSorter, JTableHeader, MouseListener] author: aterai pubdate: 2008-03-24T14:15:18+09:00 description: JDK 1.6で導入されたRowSorterを使って、JTableをソートした場合、直前の選択状態がどう変化するかテストします。

概要

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

サンプルコード

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();
  }
});

コメント