Swing/UpdateSelectionOnSort のバックアップの現在との差分(No.2)
TITLE:JTableをソートした後の選択状態
JTableをソートした後の選択状態
編集者:Terai Atsuhiro~
作成日:2008-03-24
更新日:2022-10-22 (土) 22:52:31
概要
JDK 1.6
で導入されたRowSorter
を使って、JTable
をソートした場合、直前の選択状態がどう変化するかテストします。
Screenshot
Advertisement
概要
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)
をオーバーライドしたり、以下のようにJTableHeader
にMouseListener
を追加して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(); @Override public void mouseClicked(MouseEvent e) { if (table.isEditing()) { table.getCellEditor().stopCellEditing(); } table.clearSelection(); } });
- ソート後に選択状態をクリアする場合は