我在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
属性无论项目是否正确更新(或者它是“缺失”的事实)。
在您的情况下,您没有正确处理从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);
}
};
}
});