1 /*** 2 * Copyright (c) 2003 held jointly by the individual authors. 3 * 4 * This library is free software; you can redistribute it and/or modify it 5 * under the terms of the GNU Lesser General Public License as published 6 * by the Free Software Foundation; either version 2.1 of the License, or 7 * (at your option) any later version. 8 * 9 * This library is distributed in the hope that it will be useful, but 10 * WITHOUT ANY WARRANTY; with out even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU Lesser General Public License for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public License 15 * along with this library; if not, write to the Free Software Foundation, 16 * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. 17 * 18 * > http://www.gnu.org/copyleft/lesser.html 19 * > http://www.opensource.org/licenses/lgpl-license.php 20 */ 21 package net.mlw.vlh.swing.support; 22 23 import javax.swing.JTable; 24 25 /*** 26 * @author Matthew L. Wilson 27 * @version $Revision: 1.1 $ $Date: 2005/08/30 18:54:25 $ 28 */ 29 public class SelectionSupport 30 { 31 public static void maintainSelectedRows(KeyRetriever keyRetriever, JTable table, AbstractValueListTableModel model, TableSorter sorter, 32 Runnable runnable) 33 { 34 String key = null; 35 int row = table.getSelectedRow(); 36 37 if (table.getSelectedRow() != -1) 38 { 39 int selectedRow = table.getSelectedRow(); 40 int sortedRow = sorter.modelIndex(selectedRow); 41 key = keyRetriever.getKey(model.getBean(sortedRow)); 42 } 43 44 runnable.run(); 45 46 if (key != null) 47 { 48 int topIndex = 0; 49 int bottomIndex = 0; 50 int length = model.getRowCount(); 51 for (int i = 1;; i++) 52 { 53 if (((topIndex = row + i) < length) || ((bottomIndex = row - i) > -1)) 54 { 55 if (topIndex < length) 56 { 57 Object bean = model.getBean(sorter.modelIndex(topIndex)); 58 if (key.equals(keyRetriever.getKey(bean))) 59 { 60 table.getSelectionModel().clearSelection(); 61 table.getSelectionModel().setLeadSelectionIndex(topIndex); 62 break; 63 } 64 } 65 66 if (bottomIndex > -1) 67 { 68 Object bean = model.getBean(sorter.modelIndex(bottomIndex)); 69 if (key.equals(keyRetriever.getKey(bean))) 70 { 71 table.getSelectionModel().clearSelection(); 72 table.getSelectionModel().setLeadSelectionIndex(bottomIndex); 73 break; 74 } 75 } 76 } 77 else 78 { 79 break; 80 } 81 } 82 } 83 } 84 85 public interface KeyRetriever 86 { 87 String getKey(Object bean); 88 } 89 }