java一次从JavaFX TableView中删除多行的问题
我试图制作一个按钮,当TableView中的多行被选中时,所有选中的行都会被删除
我正在使用getSelectedIndicies
创建一个可观察列表,但它工作不正常
如果我选择前三行,我让它在删除标记时打印出标记,然后打印0,1,然后删除第一行和第三行,但三行的中间部分没有删除
delBtn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent e) {
ObservableList<Integer> index =
table.getSelectionModel().getSelectedIndices();
for (int location: index) {
System.out.println(location);
data.remove(location);
}
table.getSelectionModel().clearSelection();
}
});
# 1 楼答案
您可以使用for循环,它对您的表选择进行快照并在其中进行迭代。例如:
我希望他们能解决这个问题
# 2 楼答案
有一种方法可以解决这个问题,按照OP最初的要求使用
getSelectedIndices()
。以下是解决方案:这是因为它按降序对索引进行排序,因此只会首先删除最高的索引,这样,要删除的其他项的索引就不会因为删除而改变
# 3 楼答案
使用索引删除无法工作,因为在每次抑制时,剩余的索引都会更改
您可以删除
selectedItems
:# 4 楼答案
出于某种原因,这是可行的:
我怀疑selectedItems列表(com.sun.javafx.collections.ObservableListWrapper)的内部实现可能存在一些缺陷
编辑 是的,这肯定是个错误:https://javafx-jira.kenai.com/browse/RT-24367
# 5 楼答案
我在使用ListView(在我的例子中是selectedView)时遇到了类似的问题,而且猜测的项目也被索引删除了。所以我放弃了使用如下所示的循环
改成
效果很好。希望这对任何人都有帮助