这个问题在这里被问了几次,但没有一个解决方案对我有用,可能是因为最新版本或其他问题。
我有一个属性很少的对象,其中一个属性在从网络返回响应时发生变化。我想在新值到达时动态更新树(可以逐个单元)。从我读到的内容来看,您应该使用 StringProperty 类来表示可观察的值。
我尝试过的事情:
使用此属性注册列,
向属性添加事件监听器并触发树更新
public interface PropertyState {
StringProperty stateProperty();
和树项目(我从另一个答案中使用了这个......)
public class TableItem extends TreeItem<PropertyState> {
public TableItem(PropertyState state) {
super(state);
state.stateProperty().addListener((obs, oldName, newName) -> {
TreeModificationEvent<PropertyState> event =
new TreeModificationEvent<>(TreeItem.valueChangedEvent(), this);
Event.fireEvent(this, event);
});
}
}
最后是树状视图表:
TreeTableColumn<PropertyState, String> state = new TreeTableColumn<>("State");
state.setCellValueFactory(cellData -> cellData.getValue().getValue().stateProperty());
getColumns().add(state);
// more code to populate the tree with objects
所以无论我尝试什么,单元格值都不会改变。我可以追踪网络,StringProperty 确实发生了变化,但事件从未被触发,并且单元格保持原始值。
似乎正在进行一些包装或克隆...任何帮助将不胜感激。
按照要求制作了一个简单的代码示例。这似乎工作正常,所以我的原始代码中一定有错误。