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

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

我在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);
                        }
                    }
                };
            }
        });
javafx-8
1个回答
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);
            }
        };
    }
});
© www.soinside.com 2019 - 2024. All rights reserved.