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