在javafx中删除ListView上的选定项目

Jav*_*mer 3 listview javafx cell rowdeleting

我有一个ListViewwith items,并开发了一个删除该项目的删除功能。我面临的问题是当我删除一个项目时,下面的项目也会被删除。

为了让您有更好的理解。前任:

如果列表中有 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);

            }
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

我只想删除选定的项目。我怎么做?以及如何使表格具有多重选择功能?

players是 中使用的玩家列表ListView

fab*_*ian 5

您可以使用以下行从列表中删除 2 项:

playerList.getItems().remove(selectedIdx);
        // ^ this should return players
players.remove(selectedIdx);
Run Code Online (Sandbox Code Playgroud)

删除其中之一。

要允许多项选择,请设置MultipleSelectionModel.selectionModeSelectionMode.MULTIPLE