java javafx listview和treeview控件未正确重新绘制
我试图用javafx将元素放在listview和treeview上,但这两个控件都不会刷新它们的内容。我使用obvservable列表来控制项目,每次我删除一个项目时,listview或treeview都会将其从数据源中删除。但这一观点并没有更新。我还在看所有的东西。唯一的区别是,无法再选择已删除的项目。例如,链接2显示折叠的项目列表。图1显示了折叠前的项目。项目已折叠,但旧条目仍然可见。有人知道这个问题的解决办法吗。谢谢大家帮助我
链接1:treeview is not collapsed 链接2:treeview is collapsed but not updating old view
这是我用来显示listview的自定义单元格工厂:
public ListCell<T> call(final ListView<T> param) {
ListCell<T> cell = new ListCell<T>(){
@Override
protected void updateItem(final T persistentObject, final boolean empty) {
super.updateItem(persistentObject, empty);
if(persistentObject instanceof POProcessStep){
POProcessStep poProcessStep = (POProcessStep) persistentObject;
if (persistentObject != null) {
super.setText(poProcessStep.getId() + " - " + poProcessStep.getTitle());
}
}else if(persistentObject instanceof POProcess){
POProcess poProcess = (POProcess) persistentObject;
if (persistentObject != null) {
super.setText(poProcess.getId() + " - " + poProcess.getTitle());
}
}else if(persistentObject instanceof POCategory){
POCategory poCategory = (POCategory) persistentObject;
if(persistentObject != null){
super.setText(poCategory.getId() + " - " + poCategory.getTitle());
}
}else if(persistentObject instanceof String){
if(persistentObject != null){
super.setText(String.valueOf(persistentObject));
}
}
super.setGraphic(null);
}
};
return cell;
}
# 1 楼答案
单元格工厂的
updateItem(...)
需要处理单元格为空的情况。当项目被删除(或由于TreeView
中的节点被折叠而变为空)并且先前显示项目的单元格被重新用作空单元格时,情况正是如此: