powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Скроллинг в JTable на выбранную строку
5 сообщений из 5, страница 1 из 1
Скроллинг в JTable на выбранную строку
    #34406878
shtuzer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, коллеги!

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

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


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