I have made search everywhere so this is my 'last' hope.
I have a JTable which I populate with some CSV values. When I performe an action to remove selected rows, it does not remove all ... To understand better follow the debugs:
Begin (total selected): 6
Removed index: 6
Removed index: 4
Removed index: 3
Removed index: 2
Removed index: 1
End (total selected): 0
But is remaining one.... Note that 5 of them was removed, but one was skipped... I don't understand why this is happening.
My code:
// I got a List<LikedHashMap<String, String>> data
// where I store my CSV data.
// To populate the JTable I remove from this list (data)
// and insert to JTable.
// Before remove from JTable, I put back the row into data.
// THIS LOOP IS WORKING PRETTY WELL.
for (int row : this.table.getSelectedRows()) {
// Vamos recolocar esta linha na lista de não selecionados
LinkedHashMap<String, String> newRow = new LinkedHashMap<>();
// Vamos pegar todos os dados da linha
for (int c = 0; c < this.headerCols.size(); c++) {
newRow.put(
this.headerCols.get(c),
(String) this.tableModel.getValueAt(row, c)
);
}
// Adiciona aos nao selecionados
if (!this.data.contains(newRow)) {
this.data.add(newRow);
}
}
/**
* MY PROBLEM ACTUALLY BEGINS HERE...
*/
System.out.println("Begin (total selected): "+String.valueOf(this.table.getSelectedRowCount()));
// Remove da tabela.
while(this.table.getSelectedRow() != -1) {
System.out.println("Removed item: "+String.valueOf(this.table.getSelectedRowCount()));
this.tableModel.removeRow(this.table.getSelectedRow());
}
System.out.println("End (total selected): "+String.valueOf(this.table.getSelectedRowCount()));
Exception
Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Invalid index
at javax.swing.DefaultRowSorter.convertRowIndexToModel(DefaultRowSorter.java:514)
at javax.swing.JTable.convertRowIndexToModel(JTable.java:2642)
at javax.swing.JTable.getValueAt(JTable.java:2717)
at javax.swing.JTable.prepareRenderer(JTable.java:5706)
at javax.swing.plaf.synth.SynthTableUI.paintCell(SynthTableUI.java:683)
at javax.swing.plaf.synth.SynthTableUI.paintCells(SynthTableUI.java:580)
at javax.swing.plaf.synth.SynthTableUI.paint(SynthTableUI.java:364)
at javax.swing.plaf.synth.SynthTableUI.update(SynthTableUI.java:275)
at javax.swing.JComponent.paintComponent(JComponent.java:780)
at javax.swing.JComponent.paint(JComponent.java:1056)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5219)
at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:290)
at javax.swing.RepaintManager.paint(RepaintManager.java:1265)
at javax.swing.JComponent._paintImmediately(JComponent.java:5167)
at javax.swing.JComponent.paintImmediately(JComponent.java:4978)
at javax.swing.RepaintManager$4.run(RepaintManager.java:824)
at javax.swing.RepaintManager$4.run(RepaintManager.java:807)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:807)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:782)
at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:731)
at javax.swing.RepaintManager.access$1300(RepaintManager.java:64)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1720)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Thank you very much, guys!