私は項目がListView
であり、項目を削除するdelete関数を開発しました。私が直面している問題は、アイテムを削除すると、下のアイテムも削除されます。javafxのListViewで選択した項目を削除する
より理解を深めるためです。例:
リストに5つのアイテムがあり、「アイテム2」を選択して削除すると、アイテム2 & 3が削除されます。また、項目1,4,5がリストビューに残ります。私は、リスト上の最後の項目を削除した場合、アイテムは削除されると、私はここでjava.lang.IndexOutOfBoundsException: Index: 0, Size: 0
を得る私のコードです:
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);
}
}
});
}
私は唯一の選択した項目を削除することにしたいです。それ、どうやったら出来るの?そして、どのようにしてテーブルを複数選択可能にしますか?
players
は、ListView
で使用されているプレーヤーの一覧です。
「選手」とは何ですか? – fabian
selectedIdxが最後のインデックスでない場合、newSelectedIdxはselectedIdxで割り当てられます。したがって、このシナリオでは、その項目を削除してから選択すると、要素が残っていないため、indexOutofBoundsExceptionが発生します。 –
@fabianのプレイヤーはobservableListですはリストビューに接続されています –