在javafx中删除ListView上的选定项

在javafx中删除ListView上的选定项,listview,javafx,cell,rowdeleting,Listview,Javafx,Cell,Rowdeleting,我有一个带有项目的列表视图,并开发了删除项目的删除功能。我面临的问题是,当我删除一个项目时,下面的项目也会被删除 给你一个更好的理解。例: 如果我在列表中有5个项目,并且我选择并删除了“项目2”,那么项目2和3将被删除。项目1、4和5保留在列表视图中。如果我删除列表中的最后一个项目,那么该项目将被删除,并且我将得到一个java.lang.IndexOutOfBoundsException:Index:0,Size:0 这是我的密码: public void handleDeleteBut

我有一个带有项目的
列表视图
,并开发了删除项目的删除功能。我面临的问题是,当我删除一个项目时,下面的项目也会被删除

给你一个更好的理解。例:

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

            }
        }
    });
}
public void handleDeleteButton(){
setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent事件){
final int-selectedx=playerList.getSelectionModel().getSelectedIndex();
如果(选择edidx!=-1){
String itemToRemove=playerList.getSelectionModel().getSelectedItem();
final int Newselectedx=
(selectedx==playerList.getItems().size()-1)
?选择dIDX-1
:选择edidx;
playerList.getItems().remove(选择edidx);
playerList.getSelectionModel().select(newselectedx);
//移除阵列的播放机
System.out.println(“selectIdx:+selectedIdx”);
System.out.println(“项:+itemToRemove”);
玩家。移除(选择edidx);
}
}
});
}
我只想删除选定的项目。我该怎么做?您如何使表格具有多选项

players
列表视图中使用的播放器列表

final int newSelectedIdx =
                        (selectedIdx == playerList.getItems().size() - 1)
                                ? selectedIdx - 1
                                : selectedIdx;

                playerList.getItems().remove(selectedIdx);
  • 如您所见,一旦分配了
    newselectedx
    ,您就可以尝试删除
    selectedx
    。有时,
    newselectedx
    selectedx
    相同。这就是为什么即使你打算删除一个项目,其他项目也会被删除
  • 假设您只剩下一个项目,您将删除该项目,然后选择它,您将获得indexOutofBoundsException

  • 您可以做的是删除逻辑可以在handleDeleteButton()中隔离。选择事件可以用其他方法处理,这样您就不会在同一功能中混淆删除和选择。

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

    playerList.getItems().remove(selectedIdx);
            // ^ this should return players
    players.remove(selectedIdx);
    
    移除其中一个


    要允许多个选择,请设置为。

    什么是
    播放器
    ?如果selectedx不是最后一个索引,则会为newselectedx分配selectedx。因此,在这种情况下,您将删除该项目,然后选择它,您将获得indexOutofBoundsException,因为将没有元素剩余。@fabian players是连接到ListView的可观察列表。我明白您的意思,但不太确定如何解决它。啊哈,明白了。我决定使用
    播放器。删除(选择edidx)
    并删除另一个。很好!