Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Скроллинг в JTable на выбранную строку / 5 сообщений из 5, страница 1 из 1
21.03.2007, 18:00:14
    #34406878
shtuzer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скроллинг в JTable на выбранную строку
Добрый день, коллеги!

Подскажите!
Есть ли у JTable метод, позволяющий скроллить JTable на
выбранную строку?

Заранее благодарен
...
Рейтинг: 0 / 0
21.03.2007, 20:09:40
    #34407196
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скроллинг в JTable на выбранную строку
...
Рейтинг: 0 / 0
21.03.2007, 22:07:34
    #34407336
leafox
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скроллинг в JTable на выбранную строку
table.changeSelection( ... );
...
Рейтинг: 0 / 0
25.03.2007, 14:39:18
    #34413991
Дуремар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скроллинг в JTable на выбранную строку
Во первых тынц
Во-вторых пример использования:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
 import  javax.swing.*;
 import  javax.swing.table.TableCellEditor;
 import  javax.swing.table.TableCellRenderer;
 import  java.awt.*;

 public   class  TableUtils
{
     public   static   void  scrollSelectionToVisible(JTable table)
    {
         if  (table ==  null )
        {
             return ;
        }

         int  minIndex = table.getSelectionModel().getMinSelectionIndex();
         if  ((minIndex <  0 ) || (minIndex >= table.getRowCount()))
        {
             return ;
        }

         int  maxIndex = table.getSelectionModel().getMaxSelectionIndex();
         if  ((maxIndex <  0 ) || (maxIndex >= table.getRowCount()))
        {
             return ;
        }

        scrollRowToVisible(table, maxIndex);
         if  (minIndex != maxIndex)
        {
            scrollRowToVisible(table, minIndex);
        }
    }

     public   static   void  scrollRowToVisible(JTable table,  int  row)
    {
        scrollTableColumnToVisible(table, row,  0 );
    }

     public   static   void  scrollModelColumnToVisible(JTable table,  int  row,  int  column)
    {
         if  (table ==  null )
        {
             return ;
        }
        scrollTableColumnToVisible(table, row, table.convertColumnIndexToView(column));
    }

     public   static   void  scrollTableColumnToVisible(JTable table,  int  row,  int  column)
    {
         if  (table ==  null )
        {
             return ;
        }
         if  ((row <  0 ) || (row >= table.getRowCount()))
        {
             return ;
        }
         if  ((column <  0 ) || (column >= table.getColumnCount()))
        {
             return ;
        }

        Rectangle cellRect = table.getCellRect(row, column, true);
        table.scrollRectToVisible(cellRect);
    }

     public   static   void  selectRow(JTable table,  int  row)
    {
        selectRow(table, row, true);
    }

     public   static   void  selectRow(JTable table,  int  row,  boolean  grabFocus)
    {
         if  (table ==  null )
        {
             return ;
        }
         int  rowCount = table.getRowCount();
         if  (rowCount <=  0 )
        {
             return ;
        }

        stopCellEditing(table);
         if  ((row <  0 ) || (row >= rowCount))
        {
            table.clearSelection();
        }
         else 
        {
            table.setRowSelectionInterval(row, row);
            scrollRowToVisible(table, row);
        }
         if  (grabFocus && !table.hasFocus())
        {
            table.grabFocus();
        }
    }

     public   static   void  selectModelCell(JTable table,  int  row,  int  column)
    {
        selectTableCell(table, row, table.convertColumnIndexToView(column));
    }

     public   static   void  selectModelCell(JTable table,  int  row,  int  column,  boolean  grabFocus)
    {
        selectTableCell(table, row, table.convertColumnIndexToView(column), grabFocus);
    }

     public   static   void  selectTableCell(JTable table,  int  row,  int  column)
    {
        selectTableCell(table, row, column, true);
    }

     public   static   void  selectTableCell(JTable table,  int  row,  int  column,  boolean  grabFocus)
    {
         if  (table ==  null )
        {
             return ;
        }
         int  rowCount = table.getRowCount();
         if  (rowCount <=  0 )
        {
             return ;
        }
         int  columnCount = table.getColumnCount();
         if  (columnCount <=  0 )
        {
             return ;
        }

        stopCellEditing(table);
         if  ((row <  0 ) || (row >= rowCount) || (column <  0 ) || (column >= columnCount))
        {
            table.clearSelection();
        }
         else 
        {
            table.setRowSelectionInterval(row, row);
            table.getSelectionModel().setAnchorSelectionIndex(row);
             if  (table.getColumnSelectionAllowed())
            {
                table.getColumnModel().getSelectionModel().setSelectionInterval(column, column);
            }
            table.getColumnModel().getSelectionModel().setAnchorSelectionIndex(column);
            scrollTableColumnToVisible(table, row, column);
        }
         if  (grabFocus && !table.hasFocus())
        {
            table.grabFocus();
        }
    }

     public   static   void  selectFirst(JTable table)
    {
        selectFirst(table, true);
    }

     public   static   void  selectFirst(JTable table,  boolean  grabFocus)
    {
         if  (table ==  null )
        {
             return ;
        }
         if  (table.getRowCount() >  0 )
        {
            selectRow(table,  0 , grabFocus);
        }
    }

     public   static   void  selectLast(JTable table)
    {
        selectLast(table, true);
    }

     public   static   void  selectLast(JTable table,  boolean  grabFocus)
    {
         if  (table ==  null )
        {
             return ;
        }
         int  rowCount = table.getRowCount();
         if  (rowCount >  0 )
        {
            selectRow(table, rowCount -  1 , grabFocus);
        }
    }

     public   static   void  selectPrevious(JTable table)
    {
        selectPrevious(table, true);
    }

     public   static   void  selectPrevious(JTable table,  boolean  grabFocus)
    {
         if  (table ==  null )
        {
             return ;
        }
        ListSelectionModel selModel = table.getSelectionModel();
         if  (selModel ==  null )
        {
             return ;
        }
         int  rowCount = table.getRowCount();
         if  (rowCount <=  0 )
        {
             return ;
        }

         int  index = selModel.getAnchorSelectionIndex() -  1 ;
         if  (index <  0 )
        {
            index =  0 ;
        }
        selectRow(table, index, grabFocus);
    }

     public   static   void  selectNext(JTable table)
    {
        selectNext(table, true);
    }

     public   static   void  selectNext(JTable table,  boolean  grabFocus)
    {
         if  (table ==  null )
        {
             return ;
        }
        ListSelectionModel selModel = table.getSelectionModel();
         if  (selModel ==  null )
        {
             return ;
        }
         int  rowCount = table.getRowCount();
         if  (rowCount <=  0 )
        {
             return ;
        }

         int  index = selModel.getAnchorSelectionIndex();
         if  (index <  0 )
        {
            index =  0 ;
        }
         else 
        {
            index++;
             if  (index >= rowCount)
            {
                index = rowCount -  1 ;
            }
        }
        selectRow(table, index, grabFocus);
    }

     public   static   void  stopCellEditing(JTable table)
    {
         if  (table ==  null )
        {
             return ;
        }
        TableCellEditor editor = table.getCellEditor();
         if  (editor ==  null )
        {
             return ;
        }
         if  (!editor.stopCellEditing())
        {
            editor.cancelCellEditing();
        }
    }

     public   static   void  cancelCellEditing(JTable table)
    {
         if  (table ==  null )
        {
             return ;
        }
        TableCellEditor editor = table.getCellEditor();
         if  (editor ==  null )
        {
             return ;
        }
        editor.cancelCellEditing();
    }

     public   static   void  startModelCellEditing(JTable table,  int  row,  int  column)
    {
         if  (table ==  null )
        {
             return ;
        }

        startTableCellEditing(table, row, table.convertColumnIndexToView(column));
    }

     public   static   void  startTableCellEditing(JTable table,  int  row,  int  column)
    {
         if  (table ==  null )
        {
             return ;
        }

         if  ((row <  0 ) || (row >= table.getRowCount()))
        {
             return ;
        }
         if  ((column <  0 ) || (column >= table.getColumnCount()))
        {
             return ;
        }

        stopCellEditing(table);
         if  (table.getCellEditor() !=  null )
        {
             return ;
        }
        selectTableCell(table, row, column);
        table.editCellAt(row, column);

        TableCellEditor editor = table.getCellEditor();
         if  (editor  instanceof  NCGAbstractTableCellEditor)
        {
            ((NCGAbstractTableCellEditor)editor).editingWasStartedArtificially(table);
        }
    }

    /**
     * This methid calculate the minimum width of table column, that needed for correct
     * display of all cell in this column. Method does not consider the distance between
     * columns in the table. To calculate this value it is necessary to increase result
     * of the method on table.getColumnModel().getColumnMargin() value.
     * @param table the table
     * @param column index of column in the table
     * @return column width
     */
     public   static   int  calculateBestColumnWidth(JTable table,  int  column)
    {
         if  (table ==  null )
        {
             return   0 ;
        }
         if  ((column <  0 ) || (column >= table.getColumnCount()))
        {
             return   0 ;
        }

         int  res =  0 ;
        TableCellRenderer renderer;
        Component rendererComponent;
        Dimension prefferdSize;
         int  maxInd = table.getRowCount();
         for  ( int  row =  0 ; row < maxInd; row++)
        {
            renderer = table.getCellRenderer(row, column);
             if  (renderer ==  null )
            {
                 continue ;
            }
            rendererComponent = table.prepareRenderer(renderer, row, column);
             if  (rendererComponent ==  null )
            {
                 continue ;
            }
            prefferdSize = rendererComponent.getPreferredSize();
             if  (prefferdSize ==  null )
            {
                 continue ;
            }
             if  (prefferdSize.width > res)
            {
                res = prefferdSize.width;
            }
        }
         return  res;
    }
}

Классом можно пользоваться в любых целях - хоть в коммерчиских, хоть просто так
Вобщем берите и юзайте - мне не жалко
...
Рейтинг: 0 / 0
25.03.2007, 15:45:02
    #34414028
Дуремар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скроллинг в JTable на выбранную строку
Только вот этот кусок не скомпиляется:
Код: plaintext
1.
2.
3.
4.
5.
        TableCellEditor editor = table.getCellEditor();
         if  (editor  instanceof  NCGAbstractTableCellEditor)
        {
            ((NCGAbstractTableCellEditor)editor).editingWasStartedArtificially(table);
        }
Вобщем методы startModelCellEditing и startTableCellEditing можно смело выкинуть - это уже мои заморочки.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Скроллинг в JTable на выбранную строку / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]