Swing/UpdateSelectionOnSort のバックアップの現在との差分(No.3)
- バックアップ一覧
- 差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Swing/UpdateSelectionOnSort へ行く。
- 追加された行はこの色です。
- 削除された行はこの色です。
TITLE:JTableをソートした後の選択状態 #navi(../) *JTableをソートした後の選択状態 [#ke69df21] 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: https://lh5.googleusercontent.com/_9Z4BYR88imo/TQTWaXC_E3I/AAAAAAAAApM/H9h2pJw-VSQ/s800/UpdateSelectionOnSort.png --- * 概要 [#summary] `JDK 1.6`で導入された`RowSorter`を使って、`JTable`をソートした場合、直前の選択状態がどう変化するかテストします。 #contents #download(https://lh5.googleusercontent.com/_9Z4BYR88imo/TQTWaXC_E3I/AAAAAAAAApM/H9h2pJw-VSQ/s800/UpdateSelectionOnSort.png) **概要 [#g9471dc9] JDK 1.6 で導入された RowSorter を使って、JTableをソートした場合、直前の選択状態がどう変化するかテストします。 -&jnlp; -&jar; -&zip; #screenshot **サンプルコード [#rfe93d8e] #code{{ * サンプルコード [#sourcecode] #code(link){{ table.setUpdateSelectionOnSort(true); }} **解説 [#ib5c8542] ソート後の選択状態は、JTable#setUpdateSelectionOnSort メソッドで切り替えることが出来ます。 - setUpdateSelectionOnSort(true) -- ソート前と、「同じ内容の行」が選択された状態になる -- デフォルト - setUpdateSelectionOnSort(false) -- ソート前と、「表示上同じ行」が選択された状態になる ---- JDK 1.5 などで、TableSorter.java を使用したときと同じように、ソート後は選択状態をクリアする場合は、以下のようにJTableHeader に MouseListener を追加して、table.clearSelection() する方法などがあります。 * 解説 [#explanation] - `UpdateSelectionOnSort` -- ソート後の選択状態は`JTable#setUpdateSelectionOnSort(boolean)`メソッドで切り替えることが可能 -- `setUpdateSelectionOnSort(true)` --- ソート前と「同じ内容の行」が選択された状態になる(デフォルト) -- `setUpdateSelectionOnSort(false)` --- ソート前と「表示上同じ行」が選択された状態になる - `ClearSelectionOnSort` -- ソート後に選択状態をクリアする場合は`TableRowSorter#toggleSortOrder(int)`をオーバーライドしたり、以下のように`JTableHeader`に`MouseListener`を追加して`table.clearSelection()`を実行する必要がある -- チェックなし --- 選択状態を維持(デフォルト) -- チェックあり --- ソート後は選択状態をクリア --- `JDK 1.5`などで`TableSorter.java`を使用した場合の動作と同じになるように設定する #code{{ 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(); } }); }} //**参考リンク **コメント [#o297f6ce] * 参考リンク [#reference] - [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/JTable.html#setUpdateSelectionOnSort-boolean- JTable#setUpdateSelectionOnSort(boolean) (Java Platform SE 8)] * コメント [#comment] #comment #comment