JTable sortieren/filtern, dann getSelectedRows()

darkmagic2002

Mitglied
Hallo,
es mag einfach nicht funktionieren:
Immer wenn ich die JTable filtern oder sortieren lasse, kann ich nicht die Zellen löschen, die ich löschen will, weil ich dazu die Methode
Code:
getSelectedRows()
benutze, welche die Zellennummern der unsortierten und ungefilterten Tabelle liefert, also quasi wie vor dem Sortieren oder Filtern.

Nun meine Frage:
Wie kann ich dann die aktuell selektierten Werte bekommen, die also auch das Aussortieren/Filtern berücksichtigen, weil sich ja dadurch die Zellennummern ändern

Ein ähnlicher Fall schon hier: http://www.tutorials.de/forum/java/280430-jtable-sortieren-und-dann-getselectedrow.html

Für eine Antwort wäre ich dankbar,
viele Grüße,
Kevin
 
Hallo!
Ich nehme an du verwendest einen TableRowSorter zum sortieren deiner JTable. Da solltest du dir mal die Methode convertRowIndexToModel. Der übergibst du eine Zeilennummer aus dem View und bekommst die entsprechende Zeilennummer aus dem Model zurück.

Hab das selber schonmal benötigt:
Java:
fileTable.getSelectionModel().addListSelectionListener(new ListSelectionListener()
{
	public void valueChanged(ListSelectionEvent e)
	{
		final ListSelectionModel lsm = (ListSelectionModel)e.getSource();
	    
	    if (lsm.isSelectionEmpty()) 
	    {
	    	// no selected rows
	    } 
	    else 
	    {
	    	final int minIndex = lsm.getMinSelectionIndex();
	    	final int maxIndex = lsm.getMaxSelectionIndex();
	
	        final ArrayList<Integer> indices = new ArrayList<Integer>();
			        
	        for (int i = minIndex; i <= maxIndex; i++) 
	        {
	        	if(lsm.isSelectedIndex(i)) 
	        	{
					indices.add(fileTable.getRowSorter().convertRowIndexToModel(i));
				}
	        }
			 // [...]
		}
	}
});

mfg flo
 
Zuletzt bearbeitet von einem Moderator:
Hey,
vielen Dank!! Genau die Methode
Code:
convertRowIndexToModel()
habe ich gebraucht.
Entschuldige, dass ich kein Beispiel geliefert habe. Im Prinzip ist es nur, den Wert der o.g. Methode der
Code:
removeRow(int)
-Methode des Models zu übergeben:

Java:
int[] positions = table.getSelectedRows();
				//reverse array "positions[]"

				for (int i = 0; i < positions.length; i++)
				{
					table.getModel().removeRow(table.convertRowIndexToModel(positions[i]));
				}

Nun funktioniert das auch!
Grüße,
kevin
 

Neue Beiträge

Zurück