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

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

編集者:Terai Atsuhiro~

作成日:2008-03-24
更新日:2022-10-22 (土) 22:52:31
  • category: swing folder: UpdateSelectionOnSort title: JTableをソートした後の選択状態 tags: [JTable, TableRowSorter, JTableHeader, MouseListener] author: aterai pubdate: 2008-03-24T14:15:18+09:00 description: JDK 1.6で導入されたRowSorterを使って、JTableをソートした場合、直前の選択状態がどう変化するかテストします。 image: https://lh5.googleusercontent.com/_9Z4BYR88imo/TQTWaXC_E3I/AAAAAAAAApM/H9h2pJw-VSQ/s800/UpdateSelectionOnSort.png

概要

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

概要

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

#screenshot

サンプルコード

#spanend
#spanadd
* サンプルコード [#sourcecode]
#spanend
#spanadd
#code(link){{
#spanend
table.setUpdateSelectionOnSort(true);
  • &jnlp;
  • &jar;
  • &zip;

解説

ソート後の、選択状態は、JTable#setUpdateSelectionOnSort メソッドで切り替えることが出来ます。
  • setUpdateSelectionOnSort(true)
    • ソート前と、「同じ内容の列」が選択された状態になる
    • デフォルト
  • setUpdateSelectionOnSort(false)
    • ソート前と、「表示上同じ列」が選択された状態になる
  • - JDK 1.5 などで、TableSorter.java を使用したときと同じように、ソート後は選択状態をクリアする場合は、以下のようにJTableHeader に MouseListener を追加して、table.clearSelection() する方法などがあります。

解説

  • 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() {
          public void mousePressed(MouseEvent e) {
            if(table.isEditing()) {
          @Override public void mouseClicked(MouseEvent e) {
            if (table.isEditing()) {
              table.getCellEditor().stopCellEditing();
            }
            table.clearSelection();
          }
        });
        

コメント

参考リンク

コメント