我怎样才能更新表视图的项目?
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);
}
};
}
});
我已经覆盖了 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);
}
};
}
});