Javafx:从 ListView 中删除项目时,几乎所有项目都会从列表中消失,但在刷新屏幕时会重新出现

问题描述 投票:0回答:1

如果有什么难以理解的地方,我很抱歉,英语不是我的母语。

我正在尝试使用 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,我用它来标识我想要从列表中删除的文档,所以我认为没有必要将代码放在这里。

下面是列表截图(红色部分),第一个单元格是选中该单元格时的样子。 Screenshot 01

“Revisão 01”按钮工作正常,它执行我之前提到的警报中的“rev”选项,但是当我按下执行“all”选项的“Todos”按钮时,就会出现问题。 Screenshot 02

我删除了列表中的第一项,但除第二项之外的所有项目都消失了。但是,当我关闭“Plantas”窗格然后重新打开它时,ListView 会正确显示所有项目。 Screenshot 03 Screenshot 04

我尝试在删除后使用 list.refresh() ,我尝试清除 ListView 然后重新填充它,但没有任何效果。我使用打印功能打印删除前后列表中的所有项目,一切都是正确的,这仅在视觉上发生。

有人可以帮我吗?我不知道为什么会发生这种情况。

编辑:根据jewelsea的要求,我做了一个最小的可重现示例,但我认为档案太多了,所以我将所需的所有内容放在一个git存储库中,我将在下面链接。

存储库

java listview javafx
1个回答
0
投票

您正在使用两个 planList 对象,一个在控制器中,另一个在项目模型中...您应该只使用一个,或者在删除计划后重新初始化模型

© www.soinside.com 2019 - 2024. All rights reserved.