• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:JTableをソートした後の選択状態
#navi(../)
*JTableをソートした後の選択状態 [#ke69df21]
Posted by [[terai]] at 2008-03-24
#tags(JTable, TableRowSorter, JTableHeader, MouseListener)
RIGHT:Posted by &author(aterai); at 2008-03-24
* JTableをソートした後の選択状態 [#ke69df21]
``JDK 1.6``で導入された``RowSorter``を使って、``JTable``をソートした場合、直前の選択状態がどう変化するかテストします。

#contents
- &jnlp;
- &jar;
- &zip;

**概要 [#g9471dc9]
JDK 1.6 で導入された RowSorter を使って、JTableをソートした場合、直前の選択状態がどう変化するかテストします。
#ref(https://lh5.googleusercontent.com/_9Z4BYR88imo/TQTWaXC_E3I/AAAAAAAAApM/H9h2pJw-VSQ/s800/UpdateSelectionOnSort.png)

-&jnlp;
-&jar;
-&zip;

#screenshot

**サンプルコード [#rfe93d8e]
#code{{
** サンプルコード [#rfe93d8e]
#code(link){{
table.setUpdateSelectionOnSort(true);
}}

**解説 [#ib5c8542]
ソート後の選択状態は、JTable#setUpdateSelectionOnSort メソッドで切り替えることが出来ます。
** 解説 [#ib5c8542]
- ``UpdateSelectionOnSort``
-- ソート後の選択状態は、``JTable#setUpdateSelectionOnSort``メソッドで切り替えることが出来ます。
-- ``setUpdateSelectionOnSort(true)``
--- ソート前と、「同じ内容の行」が選択された状態になる(デフォルト)
-- ``setUpdateSelectionOnSort(false)``
--- ソート前と、「表示上同じ行」が選択された状態になる

- setUpdateSelectionOnSort(true)
-- ソート前と、「同じ内容の行」が選択された状態になる
-- デフォルト
- setUpdateSelectionOnSort(false)
-- ソート前と、「表示上同じ行」が選択された状態になる
- ``ClearSelectionOnSort``
-- メソッドが用意されているわけではないので、選択状態をクリアする場合は、``TableRowSorter#toggleSortOrder(int)``をオーバーライドしたり、以下のように``JTableHeader``に``MouseListener``を追加して、``table.clearSelection()``する必要があります。
-- チェックなし
--- 選択状態を維持(デフォルト)
-- チェックあり
--- ソート後は選択状態をクリア
--- ``JDK 1.5``などで``TableSorter.java``を使用した場合の動作と同じになるように

----
JDK 1.5 などで、TableSorter.java を使用したときと同じように、ソート後は選択状態をクリアする場合は、以下のようにJTableHeader に MouseListener を追加して、table.clearSelection() する方法などがあります。
#code{{
table.getTableHeader().addMouseListener(new MouseAdapter() {
  @Override 
  @Override
  public void mouseClicked(MouseEvent e) { //mousePressed(MouseEvent e) {
    if(table.isEditing()) table.getCellEditor().stopCellEditing();
    table.clearSelection();
  }
});
}}

//**参考リンク
**コメント [#o297f6ce]
** コメント [#o297f6ce]
#comment