如果有什么难以理解的地方,我很抱歉,英语不是我的母语。
我正在尝试使用 JavaFX 制作一个屏幕,其中有一个 ListView,并且在列表单元格中有一个用于删除相应项目的按钮,但是当我删除该项目时,除了一个项目之外的所有项目都会从 ListView 中消失,但仅在视觉上,它们仍然继续在列表中(如果我通过更改屏幕来刷新列表,则列表中应出现的所有项目都会重新出现)。
这是删除按钮的代码:
@FXML
public void deletePlan(ActionEvent event) {
ButtonType all = new ButtonType("All revisions");
ButtonType rev = new ButtonType("Revision 0" + model.getSelectedPlant()[0]);
ButtonType cancel = new ButtonType("Back", ButtonBar.ButtonData.CANCEL_CLOSE);
Alert confirm = new Alert(Alert.AlertType.CONFIRMATION, "Delete all plans from " + plan.getPlanName() + " or just Revision 0" + model.getSelectedPlant()[0] + "?",all, rev, cancel);
confirm.setTitle("Delete plan");
confirm.setHeaderText(null);
Optional<ButtonType> result = confirm.showAndWait();
if(!result.isPresent() || result.get() == ButtonType.CLOSE) {
Alert inf = new Alert(Alert.AlertType.INFORMATION);
inf.setTitle("Warning");
inf.setHeaderText(null);
inf.setContentText("Operation cancelled.");
inf.show();
} else if(result.get() == all) {
project.deletePlan(plan.getPlanNumber());
} else if(result.get() == rev) {
plan.deleteRevision(model.getSelectedPlant()[0]);
}
}
仅当我使用“all”选项时才会发生这种情况,该选项执行“project.deletePlan(plan.getPlanNumber());”。选项“rev”正常工作。 plan.getPlanNumber() 只是返回一个 int,我用它来标识我想要从列表中删除的文档,所以我认为没有必要将代码放在这里。
下面是列表截图(红色部分),第一个单元格是选中该单元格时的样子。
“Revisão 01”按钮工作正常,它执行我之前提到的警报中的“rev”选项,但是当我按下执行“all”选项的“Todos”按钮时,就会出现问题。
我删除了列表中的第一项,但除第二项之外的所有项目都消失了。但是,当我关闭“Plantas”窗格然后重新打开它时,ListView 会正确显示所有项目。
我尝试在删除后使用 list.refresh() ,我尝试清除 ListView 然后重新填充它,但没有任何效果。我使用打印功能打印删除前后列表中的所有项目,一切都是正确的,这仅在视觉上发生。
有人可以帮我吗?我不知道为什么会发生这种情况。
编辑:根据jewelsea的要求,我做了一个最小的可重现示例,但我认为档案太多了,所以我将所需的所有内容放在一个git存储库中,我将在下面链接。
您正在使用两个 planList 对象,一个在控制器中,另一个在项目模型中...您应该只使用一个,或者在删除计划后重新初始化模型