我有ListView
个项目,并开发了删除该项目的删除功能。我面临的问题是当我删除一个项目时,下面的项目也会被删除。
让您更好地理解。例如:
如果我在列表中有5个项目,我选择并删除"项目2",则项目2& 3被删除。和第1,4和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
中使用的玩家列表。
答案 0 :(得分:3)
您可以使用以下行从列表中删除2个项目:
playerList.getItems().remove(selectedIdx);
// ^ this should return players
players.remove(selectedIdx);
删除其中一个。
要允许多项选择,请将MultipleSelectionModel.selectionMode
设置为SelectionMode.MULTIPLE
。
答案 1 :(得分:0)
final int newSelectedIdx =
(selectedIdx == playerList.getItems().size() - 1)
? selectedIdx - 1
: selectedIdx;
playerList.getItems().remove(selectedIdx);
newSelectedIdx
后,您尝试删除selectedIdx
。有时,newSelectedIdx
将与selectedIdx
相同。这就是为什么即使你打算删除一个项目,其他项目也会被删除。你可以做的是删除逻辑可以在handleDeleteButton()中隔离。选择事件可以用其他方法处理,这样就不会混淆删除和选择相同的函数。