我正在开发一个简单的应用程序来生成.nfo文件,它们是简单的XML文件。所以我有一个看起来像这样的应用程序
由于TreeView需要一个类型参数,我为树创建了一个简单的模型。此模型封装了XML模型,因为它们只是叶子而不是节点。
我的问题
在图片中,您可以在树的左侧看到,在右侧可以看到要在xml(树叶)中编辑的属性。我绑定这些属性(目前只有titleProperty),一切正常。但是,当我在文本字段中更改某些内容时,TreeView不会更新。我必须双击TreeItem。
如何更新TreeView以反映编辑器面板中的更改?
代码位于GitHub
答案 0 :(得分:2)
我认为这是因为只有在替换TreeCell的项目而不进行修改时才会调用updateItem方法。您需要的是一种通知TreeCell实例其项目属性已更改的方法。
例如,不是使用方法setText来修改treecell的文本,而是尝试将textProperty绑定到模型对象的want属性。当然,您需要更新模型以使用JavaFX Property和Bindings 另一种解决方案可能是使用PropertyChangeListener,旧样式。
如果你想要例子,我可以尝试提供一个。
编辑:一个小例子。我修改了Episode leaf的文本。当然,您需要将EpsiodeDetails类的episode和title属性移动到javafx样式的属性。@Override
protected void updateItem(ITVShowItem item, boolean empty) {
super.updateItem(item, empty);
if (item != null) {
if (item instanceof Show) {
//nothing
} else if (item instanceof Season) {
Season season = (Season) item;
setText("Season " + season.getSeason());
} else if (item instanceof Episode) {
Episode episode = (Episode) item;
this.textProperty().bind(Bindings.concat(episode.getDetails().episodeProperty(), " - ", episode.getDetails().titleProperty()));
//setText(episode.getDetails().getEpisode() + " - " + episode.getDetails().getTitle());
}
}
}