Ich habe eine ListView
mit Elementen und entwickelt eine Löschfunktion, die das Element löscht. Das Problem, dem ich gegenüberstehe, ist, wenn ich einen Gegenstand lösche, wird der darunterliegende Gegenstand ebenfalls gelöscht.Löschen eines ausgewählten Elements in ListView in javafx
Um Ihnen ein besseres Verständnis zu geben. Beispiel:
Wenn ich 5 Elemente in einer Liste habe und ich "Element 2" auswähle und lösche, wird Element 2 & 3 gelöscht. Und Artikel 1, 4 & 5 bleibt in der Listenansicht. Wenn ich den letzten Punkt auf der Liste löschen, dann wird das Element gelöscht und ich bekomme ein java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
Hier ist mein Code:
public void handleDeleteButton() {
btnDelete.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
final int selectedIdx = playerList.getSelectionModel().getSelectedIndex();
if (selectedIdx != -1) {
String itemToRemove = playerList.getSelectionModel().getSelectedItem();
final int newSelectedIdx =
(selectedIdx == playerList.getItems().size() - 1)
? selectedIdx - 1
: selectedIdx;
playerList.getItems().remove(selectedIdx);
playerList.getSelectionModel().select(newSelectedIdx);
//removes the player for the array
System.out.println("selectIdx: " + selectedIdx);
System.out.println("item: " + itemToRemove);
players.remove(selectedIdx);
}
}
});
}
Ich mag nur das ausgewählte Element gelöscht werden. Wie mache ich das? Und wie macht man den Tisch multi wählbar?
players
ist die Liste der Player in der ListView
verwendet.
Was ist 'Spieler'? – fabian
newSelectedIdx wird mit selectedIdx zugewiesen, wenn selectedIdx nicht der letzte Index ist. In diesem Szenario entfernen Sie das Element und wählen es aus. Sie erhalten dann indexOutofBoundsException, da kein Element mehr vorhanden ist. –
@fabian Spieler ist die ObservableList mit der Listview verbunden –