KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > mlw > vlh > swing > support > SelectionSupport


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 JavaDoc;
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 JavaDoc table, AbstractValueListTableModel model, TableSorter sorter,
32          Runnable JavaDoc runnable)
33    {
34       String JavaDoc 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 JavaDoc 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 JavaDoc 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 JavaDoc getKey(Object JavaDoc bean);
88    }
89 }
Popular Tags