我怎样才能更新表视图的项目?

how can i on update item of tableview?

我已经覆盖了 javafx 8 中 TableCell 的更新项,但是当我滚动 tableview 的项目时,一些项目将随机更新

Column.setCellFactory(new Callback<TableColumn<Person, Boolean>, TableCell<Person, Boolean>>() {
            @Override
            public TableCell<Person, Boolean> call(TableColumn<Person, Boolean> param) {
                return new TableCell<Person, Boolean>() {
                    @Override
                    public void updateItem(Boolean item, boolean empty) {
                        super.updateItem(item, empty);
                        if (!isEmpty()) {
                            if (item.booleanValue()) {
                                setGraphic(new ImageView(IconResource.getImage(ICON.FLAG)));
                            }
                        } else {
                            setGraphic(null);
                        }
                    }
                };
            }
        });

您需要确保单元格的 graphic 属性 已正确更新,无论项目如何(或者它是 "missing" 的事实)。

在您的情况下,您没有正确处理从 true 作为项目到 false 作为项目的单元格:您只需保留 true 的图形而不是删除它。

此外,我建议保留对 ImageView 的引用以避免重新创建它:

Column.setCellFactory(new Callback<TableColumn<Person, Boolean>, TableCell<Spectrum, Boolean>>() {


    @Override
    public TableCell<Person, Boolean> call(TableColumn<Person, Boolean> param) {
        return new TableCell<Person, Boolean>() {

            private final ImageView image = new ImageView(IconResource.getImage(ICON.FLAG));

            @Override
            public void updateItem(Boolean item, boolean empty) {
                super.updateItem(item, empty);
                setGraphic(item == null || !item ? null : image);
            }
        };
    }
});