ListSelectionListener: wie funktioniert das mit den Indexen?

Ravebaby

Erfahrenes Mitglied
Hallo zusammen,

ich möchte von meinem ListSelectionListener erfahren in welcher Zeile sich der Fokus aktuell befindet. Laut der Javadokumentation kann man dies über die Funktionen "getFirstIndex", "getLastIndex" ermitteln. Allerdings verhalten die sich meiner Meinung nach komisch?!
Wenn ich den Fokus über meine Tabelle mittels der Pfeiltasten nach unten bewege steht der aktuelle Index in "last", wenn ich mich nach oben bewege in "first". Und ganz wild wird es, wenn ich mit der Maus durch die Gegend klicke. Was also ist denn eine systematische und richtige Vorgehensweise um herauszufinden, wo sich mein Fokus im Moment befindet?!
Hier noch mein Code dazu:
Code:
public class SelectionListener implements ListSelectionListener {
		
JTable table;
		
    SelectionListener(JTable table) {
        this.table = table;
    }
    
    public void valueChanged(ListSelectionEvent e) {
        // If cell selection is enabled, both row and column change events are fired
        if (e.getSource() == table.getSelectionModel() && table.getRowSelectionAllowed()) { // Column selection changed
        		System.out.println("Column selection changed");
        		// update selectedAttribute, update detailsPanel
            int first = e.getFirstIndex();
            System.out.println("first: " + first);
            int last = e.getLastIndex();
            System.out.println("last: " + last);
        }
    }
	}


Vielen Dank schon einmal!!
 
Hallo,

leider kann ich dir nicht genau sagen was es mit Last und First Index auf sich hat. Ich glaube das dies Maximale und minimale Werte im List wiederspiegelt.

Anbei ein kleines Beispiel:

Code:
public class TBaseListSelectionListener implements ListSelectionListener
{
	Container m_oAdaptee;
	
	public TBaseListSelectionListener(Container oAdaptee)
	{
		m_oAdaptee = oAdaptee;
	}
	
	public void valueChanged(ListSelectionEvent ls) 
	{
                // der Listener wird bei einem Rowchange 2mal aufgerufen einmal
                // wenn er die vorherige selection deaktiviert und dann die neue aktiviert
                // vereinfacht ausgedrückt
		if(!ls.getValueIsAdjusting())
		{
			ListSelectionModel lsm = (ListSelectionModel)ls.getSource();
                         // 
                         int iSelectedItem = lsm.getMinSelectionIndex();
                         // wenn du eine Selectiongruppe hast 
                         int iMax = lsm.getMaxSelectionIndex());
		}
	}
	
}

Das Beispiel müsste selbsterklärend sein.

Grüße
R.
 
Zuletzt bearbeitet:
Zurück