Swing/SelectionKeeper のバックアップの現在との差分(No.17)
- バックアップ一覧
- 差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Swing/SelectionKeeper へ行く。
- 1 (2005-12-16 (金) 17:22:27)
- 2 (2006-01-16 (月) 19:33:26)
- 3 (2006-02-07 (火) 15:47:49)
- 4 (2006-02-27 (月) 16:25:27)
- 5 (2006-06-17 (土) 19:55:17)
- 6 (2006-08-17 (木) 11:14:04)
- 7 (2006-08-18 (金) 08:15:05)
- 8 (2006-11-10 (金) 03:34:53)
- 9 (2006-11-24 (金) 15:41:52)
- 10 (2007-02-13 (火) 17:43:48)
- 11 (2007-05-17 (木) 18:05:12)
- 12 (2007-07-30 (月) 16:31:04)
- 13 (2013-02-20 (水) 15:28:23)
- 14 (2013-03-21 (木) 15:51:00)
- 15 (2015-01-20 (火) 15:47:52)
- 16 (2015-08-05 (水) 15:16:20)
- 17 (2016-09-21 (水) 01:20:57)
- 18 (2017-04-04 (火) 14:17:08)
- 19 (2017-11-04 (土) 00:05:27)
- 20 (2019-05-22 (水) 19:34:28)
- 21 (2019-06-11 (火) 19:46:31)
- 22 (2021-02-25 (木) 10:46:26)
- 追加された行はこの色です。
- 削除された行はこの色です。
--- category: swing folder: SelectionKeeper title: TableSorterでソートしても選択状態を維持 tags: [JTable, JTableHeader, TableSorter] author: aterai pubdate: 2005-12-12 pubdate: 2005-12-12T11:20:10+09:00 description: TableSorter.javaを使ってソートしても、行の選択状態を保存しておきます。 image: https://lh4.googleusercontent.com/_9Z4BYR88imo/TQTS229Uo9I/AAAAAAAAAjc/ay3eckOCWco/s800/SelectionKeeper.png --- * 概要 [#summary] `TableSorter.java`を使ってソートしても、行の選択状態を保存しておきます。 #download(https://lh4.googleusercontent.com/_9Z4BYR88imo/TQTS229Uo9I/AAAAAAAAAjc/ay3eckOCWco/s800/SelectionKeeper.png) * サンプルコード [#sourcecode] #code(link){{ private class MouseHandler extends MouseAdapter { public void mouseClicked(MouseEvent e) { JTableHeader h = (JTableHeader) e.getSource(); //...... // ... if (column != -1) { int keyCol = 0; Vector list = saveSelectedRow(h.getTable(), keyCol); int status = getSortingStatus(column); //...... // ... setSortingStatus(column, status); loadSelectedRow(h.getTable(), list, keyCol); } } } Vector saveSelectedRow(JTable table, int keyCol) { Vector list = new Vector(); int[] ilist = table.getSelectedRows(); TestModel model = (TestModel) tableModel; for (int i = ilist.length - 1; i >= 0; i--) { list.add(model.getValueAt(modelIndex(ilist[i]), keyCol)); } return list; } void loadSelectedRow(JTable table, Vector list, int keyCol) { if (list == null || list.size() <= 0) return; for (int i = 0; i < tableModel.getRowCount(); i++) { if (list.contains(tableModel.getValueAt(modelIndex(i), keyCol))) { table.getSelectionModel().addSelectionInterval(i, i); } } } //...... // ... }} * 解説 [#explanation] `JTableHeader`がクリックされてソートが行われる前に、選択されている行のあるカラムの値を保存し、ソートが終わった後でその値をキーに選択し直しています。あるカラムは、一意で重複しない値をもつ必要があります。 `JTableHeader`がクリックされてソートが行われる前に選択されている行のあるカラムの値を保存し、ソートが終わった後でその値をキーに選択し直しています。 上記のサンプルでは、[http://docs.oracle.com/javase/tutorial/uiswing/examples/components/TableSorterDemoProject/src/components/TableSorter.java TableSorter.java]中の`MouseHandler`を変更し、`0`列目の番号をキーにして行の選択状態を保存するようにしています。 - カラムは一意で重複しない値をもつ必要がある - 上記のサンプルでは、[https://docs.oracle.com/javase/tutorial/uiswing/examples/components/TableSorterDemoProject/src/components/TableSorter.java TableSorter.java]中の`MouseHandler`を変更し、`0`列目の番号をキーにして行の選択状態を保存 - `JDK 1.6.0`の`TableRowSorter`でソートを行う場合は標準で選択状態が保存される -- [[TableRowSorterでJTableのソート>Swing/TableRowSorter]] `JDK 1.6.0`の`TableRowSorter`でソートを行う場合は、標準で選択状態が保存されるようです([[TableRowSorterでJTableのソート>Swing/TableRowSorter]])。 * 参考リンク [#reference] - [https://docs.oracle.com/javase/tutorial/uiswing/examples/components/TableSorterDemoProject/src/components/TableSorter.java TableSorter.java] - [[TableRowSorterでJTableのソート>Swing/TableRowSorter]] //* 参考リンク [#reference] * コメント [#comment] #comment #comment