在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)
并删除另一个。很好!