我怎样才能更新tableview的项目?

时间:2019-04-21 10:42:54

标签: javafx-8

我已经覆盖了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);
                        }
                    }
                };
            }
        });

1 个答案:

答案 0 :(得分:0)

您需要确保正确地更新单元格的graphic属性,而不管其涉及哪个项目(或者它实际上是“缺失”的事实)。

在您的情况下,您不能正确处理从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);
            }
        };
    }
});