Swing/UpdateSelectionOnSort のバックアップの現在との差分(No.3)
TITLE:JTableをソートした後の選択状態
JTableをソートした後の選択状態
Posted by terai at 2008-03-24- 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:
概要
JDK 1.6
で導入されたRowSorter
を使って、JTable
をソートした場合、直前の選択状態がどう変化するかテストします。
Screenshot
Advertisement
概要
JDK 1.6 で導入された RowSorter を使って、JTableをソートした場合、直前の選択状態がどう変化するかテストします。- &jnlp;
- &jar;
- &zip;
#screenshot
サンプルコード
#spanend
#spanadd
* サンプルコード [#sourcecode]
#spanend
#spanadd
#code(link){{
#spanend
table.setUpdateSelectionOnSort(true);
解説
ソート後の選択状態は、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(); } });
- ソート後に選択状態をクリアする場合は