Auslesen der markierten Einträge in einem AbstractListModel mit einem Vektor

Andre_Java

Mitglied
Ich lösche mit folgendem Code einen Wert aus meiner jList:

Code:
     Vector<Object> vector = new Vector<Object>();
      
     for(int i = 0; i < jList1.getModel().getSize(); i++) 
     {
          vector.add(jList1.getModel().getElementAt(i));
     }
     
     int Zeile = jList1.getSelectedIndex();
     vector.remove(Zeile);
     jList1.setListData(vector);

Jetzt würde ich gerne auch mehr als einen Eintrag markieren und dann alle löschen. Dafür wollte ich getSelectedIndices() nehmen. Allerdings liefert diese Funktion nur kryptische Zeichen und nicht die Indexzahlen der jList-Elemente. Wie kann ich denn die markierten Elemente auslesen?
 
Moin!
Ich weis nicht, was du genau machst, aber diese Funktion liefert einen int[] Array mit alle selektierente Indizes. Ich nehme an, du machst da irgendwas falsch..

*grüssle*
MeinerEiner
 
Moin!

Es hat sich schon erledigt. Ich habe mich hiervon irritieren lassen:

Code:
 int[] zeile = jList1.getSelectedIndices();
 System.out.println(zeile);

Ausgabe: [I@183f74d

Aber so bekomme ich einwandfrei die richtige Indexnummer raus:

Code:
System.out.println(zeile[0]);
 
Leider funktioniert das Löschen nicht richtig. Wenn ich mehr als eine Zeile lösche funktioniert es nur, wenn die letzte Zeile nicht darunter ist. Dann gibt es eine "ArrayIndexOutOfBoundsException: 3", wobei die 3 jetzt die letzte Zeile war, da die jList 4 Einträge hatte. Wenn ich irgendwie zwischendurch lösche, funktioniert es einwandfrei. Nur die letzte Zeile kann man nur alleine löschen. Was kann das sein? Ich verstehe das nicht wirklich.

Code:
             int[] Zeile = jList1.getSelectedIndices();
         
             for (int i=0;i < Zeile.length;i++)
             {
                vector.removeElementAt(Zeile[i]);
             }
 
Zuletzt bearbeitet:
Na überleg mal. Dein Vector hat 2 Einträge. Beide Einträge sind selektiert und werden daher gelöscht.
Als erstes löscht du den ersten Eintrag, okay.
Dann willst du den zweiten Eintrag löschen, Exception-> weil, dein Vector hat ja nur noch einen Eintrag.

Also entweder lässt du deine Schleife genau anders herum laufen, oder du lässt dir die selektierten Objekte zurückgeben und löscht diese.

*grüssle*
MeinerEiner
 
Ok, so geht es:

Code:
             for (int i=Zeile.length;i > 0 ;i--)
             {
                vector.removeElementAt(Zeile[i-1]);
             }

Da hätte ich wieder selber drauf kommen können. Aber manchmal hängt man einfach. Danke für den Tipp. ;)
 
Zurück