В общем, делаю выделение строки в таблице. Вот код: Код | final JTable table = new JTable(ptm); table.setSelectionBackground(Color.LIGHT_GRAY); table.setRowSelectionAllowed(true); table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); table.getSelectionModel().addListSelectionListener(new ListSelectionListener(){ @Override public void valueChanged(ListSelectionEvent e) { Integer i = e.getFirstIndex(); System.out.println(i); if(e.getValueIsAdjusting()){ return; } System.out.println(i + " !!!"); table.addRowSelectionInterval(i, i); } });
|
После клика на таблице (в данном случае по 3-й строке) на консоль выводится вот это: Код | 2 2 -1 -1 -1 -1 !!! Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Row index out of range at javax.swing.JTable.boundRow(Unknown Source) at javax.swing.JTable.addRowSelectionInterval(Unknown Source) at PersonsTable$1.valueChanged(PersonsTable.java:54) at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source) at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source) at javax.swing.DefaultListSelectionModel.setValueIsAdjusting(Unknown Source) at javax.swing.JTable.clearSelectionAndLeadAnchor(Unknown Source) at javax.swing.JTable.tableChanged(Unknown Source) at javax.swing.table.AbstractTableModel.fireTableChanged(Unknown Source) at javax.swing.table.AbstractTableModel.fireTableDataChanged(Unknown Source) at PersonsTableModel.getValueAt(PersonsTableModel.java:27) at javax.swing.JTable.getValueAt(Unknown Source) at javax.swing.JTable.prepareRenderer(Unknown Source) at javax.swing.plaf.basic.BasicTableUI.paintCell(Unknown Source) at javax.swing.plaf.basic.BasicTableUI.paintCells(Unknown Source) at javax.swing.plaf.basic.BasicTableUI.paint(Unknown Source) at javax.swing.plaf.ComponentUI.update(Unknown Source) at javax.swing.JComponent.paintComponent(Unknown Source) at javax.swing.JComponent.paint(Unknown Source) at javax.swing.JComponent.paintToOffscreen(Unknown Source) at javax.swing.BufferStrategyPaintManager.paint(Unknown Source) at javax.swing.RepaintManager.paint(Unknown Source) at javax.swing.JComponent._paintImmediately(Unknown Source) at javax.swing.JComponent.paintImmediately(Unknown Source) at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source) at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source) at javax.swing.RepaintManager.seqPaintDirtyRegions(Unknown Source) at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source) at java.awt.event.InvocationEvent.dispatch(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source)
|
Т.е. сначала всё определяется правильно, но потом почему-то значение строки становится -1, и когда флаг по e.getValueIsAdjusting() указывает, что процесс выбоа ячейки закончен, то в table.addRowSelectionInterval(i, i); передаётся -1 и соответсвенно выбрасывается ошибка. Может кто сталкивался с подобным или имеет?? Или может я что-то не так далаю?? Спасибо.
|