表视图中的JavaFX行未删除元素

表视图中的JavaFX行未删除元素,javafx,Javafx,我对表视图有问题。当我从可观察列表中删除元素时,该元素上对应的行不会被删除 我有一个关系列表person1,type,person2=>children 当我添加一个新的子项时,相关关系被创建为null、neutral、null=>child 添加一些人后,我会更改他们之间的关系,因此,当我指示兄弟姐妹时,一些不动产会被删除。但它仍然在表视图中可见。它是不可选择的,但当我点击时,它是indique。列表中的最后一个关系 添加新人员时,该行将被覆盖 this.relationSimLeftColu

我对表视图有问题。当我从可观察列表中删除元素时,该元素上对应的行不会被删除

我有一个关系列表person1,type,person2=>children 当我添加一个新的子项时,相关关系被创建为null、neutral、null=>child

添加一些人后,我会更改他们之间的关系,因此,当我指示兄弟姐妹时,一些不动产会被删除。但它仍然在表视图中可见。它是不可选择的,但当我点击时,它是indique。列表中的最后一个关系

添加新人员时,该行将被覆盖

this.relationSimLeftColumn.setCellValueFactory(cellData -> cellData.getValue().simLeftProperty());
this.relationSimRightColumn.setCellValueFactory(cellData -> cellData.getValue().simRightProperty());
this.relationTypeColumn.setCellValueFactory(cellData -> cellData.getValue().typeProperty());
和细胞工厂:

 private Callback<TableColumn<GTX_Relation, GTX_Member>,
            TableCell<GTX_Relation, GTX_Member>> setMemberCellFactory(String parameter) {
        Callback<TableColumn<GTX_Relation, GTX_Member>, TableCell<GTX_Relation, GTX_Member>> callback =
                new Callback<TableColumn<GTX_Relation, GTX_Member>, TableCell<GTX_Relation, GTX_Member>>() {
                    @Override
                    public TableCell<GTX_Relation, GTX_Member> call(TableColumn<GTX_Relation, GTX_Member> param) {
                        TableCell<GTX_Relation, GTX_Member> cell = new TableCell<GTX_Relation, GTX_Member>() {

                            @Override
                            protected void updateItem(GTX_Member item, boolean empty) {
                                super.updateItem(item, empty);
                                ImageView imageview = new ImageView();
                                if (item != null) {
                                    imageview.setFitHeight(TABLE_IMAGE_MEMBER_HEIGHT);
                                    imageview.setFitWidth(TABLE_IMAGE_MEMBER_WIDTH);
                                    imageview.setImage(new Image(item.getPhoto()));
                                    setGraphic(imageview);
                                } else {
                                    if (!empty) {
                                        imageview.setFitHeight(TABLE_IMAGE_MEMBER_HEIGHT);
                                        imageview.setFitWidth(TABLE_IMAGE_MEMBER_WIDTH);
                                        String path = parameter.equals("LEFT") == true ?
                                                ImageFiles.NO_NAME_FEMALE.toString() : ImageFiles.NO_NAME_MALE.toString();
                                        imageview.setImage(new Image(path));
                                        setGraphic(imageview);
                                    }
                                }
                            }

                        };
                        return cell;
                    }
                };

        return callback;
    }

您的电池工厂需要处理电池为空的情况

从表的项目列表中删除项目时,以前用于显示项目的单元格可能会被重新用作空单元格;i、 e.将调用其updateItemnull、true方法。对于item==null&&empty==true的情况,您当前的实现没有做任何事情,因此单元格的外观不会改变

你需要

@Override
protected void updateItem(GTX_Member item, boolean empty) {
    super.updateItem(item, empty);
    ImageView imageview = new ImageView();
    if (item != null) {
        imageview.setFitHeight(TABLE_IMAGE_MEMBER_HEIGHT);
        imageview.setFitWidth(TABLE_IMAGE_MEMBER_WIDTH);
        imageview.setImage(new Image(item.getPhoto()));
        setGraphic(imageview);
    } else {

        if (empty) {

            setGraphic(null);

        } else {

            imageview.setFitHeight(TABLE_IMAGE_MEMBER_HEIGHT);
            imageview.setFitWidth(TABLE_IMAGE_MEMBER_WIDTH);
            String path = parameter.equals("LEFT") == true ?
                    ImageFiles.NO_NAME_FEMALE.toString() : ImageFiles.NO_NAME_MALE.toString();
            imageview.setImage(new Image(path));
            setGraphic(imageview);
        }
    }
}