JList, alle selektierten Elemente löschen - bessere Idee?
-
Derzeit muss ich es derart umständlich machen:
mg_deleteButton.addActionListener(new ActionListener(){ public void actionPerformed (ActionEvent ev) { DefaultListModel listModel = (DefaultListModel)getNameList().getModel(); boolean deletedElem; do { deletedElem = false; for(int i = 0; i < listModel.getSize(); ++i) { if(getNameList().isSelectedIndex(i)) { listModel.remove(i); deletedElem = true; break; } } } while(deletedElem==true); } });
Grund: Nachdem man ein Element per remove(index) gelöscht hat ist das Model bereits up-to-date, die Liste aber scheinbar nicht. Also löscht er immer bloß ein Element. Darum gibts jetzt die doppelte Schleife - das kanns ja aber dann doch nicht sein, oder?
MfG SideWinder
-
Sowas meinst du?
JList list = ... DefaultListModel model = ... int[] selected = list.getSelectedIndices(); for( int i = selected.length-1; i>=0; i--) model.remove( selected[i] );
-
JBeni schrieb:
Sowas meinst du?
JList list = ... DefaultListModel model = ... int[] selected = list.getSelectedIndices(); for( int i = selected.length-1; i>=0; i--) model.remove( selected[i] );
Auch nicht ganz, aber schon besser. Wenn die Reihenfolge in der Elemente markiert worden durcheinander ist kommt es immer noch zu ArrayIndexOutOfBoundsExceptions
Gibts ne Methode ein Array zu sortieren? Ansonsten erstell ich jetzt eine LinkedList, füge dort das Arary ein, sortiere es, und laufe dann nach deiner MEthode von hinten nach vorne durch um die Elemente zu löschen.
MfG SideWinder
-
SideWinder schrieb:
Gibts ne Methode ein Array zu sortieren? Ansonsten erstell ich jetzt eine LinkedList, füge dort das Arary ein, sortiere es, und laufe dann nach deiner MEthode von hinten nach vorne durch um die Elemente zu löschen.
java.util.Arrays.sort()
-
Also ich hatte auch mal Schwierigkeiten mit der Löscherei, hab's dann so gemacht:
int indices[] = list.getSelectedIndices(); int size=list.size()-1; for (int i=size;i>=0;--i) { vector.removeElementAt(indices[i]); size--; }
Wahrscheinlich (hab das grad aus dem Gedächtnis gemacht) fehlt irgendwas, aber auf jeden Fall funktioniert die Löscherei von hinten ganz gut.
Zum sortieren:
Die Klasse java.util.Arrays verfügt über solche Funktionen, sonst halt selber schreibenBye
-
SideWinder schrieb:
Auch nicht ganz, aber schon besser. Wenn die Reihenfolge in der Elemente markiert worden durcheinander ist kommt es immer noch zu ArrayIndexOutOfBoundsExceptions
Nö, guck in der API nach. Das ganze ist sortiert...
-
Gut, dass sieht dann ja schon gar nicht mehr so übel aus:
DefaultListModel listModel = (DefaultListModel)getNameList().getModel(); int[] selectedElements = getNameList().getSelectedIndices(); Arrays.sort(selectedElements); for(int i = selectedElements.length - 1; i >= 0; --i) listModel.remove(selectedElements[i]);
MfG SideWinder