TreeView的主要细节

时间:2012-07-24 14:49:26

标签: xml treeview javafx-2 master-detail treeviewitem

我正在开发一个简单的应用程序来生成.nfo文件,它们是简单的XML文件。所以我有一个看起来像这样的应用程序

NFO Maker Application

由于TreeView需要一个类型参数,我为树创建了一个简单的模型。此模型封装了XML模型,因为它们只是叶子而不是节点。

我的问题

在图片中,您可以在树的左侧看到,在右侧可以看到要在xml(树叶)中编辑的属性。我绑定这些属性(目前只有titleProperty),一切正常。但是,当我在文本字段中更改某些内容时,TreeView不会更新。我必须双击TreeItem。

如何更新TreeView以反映编辑器面板中的更改?

代码位于GitHub

1 个答案:

答案 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());
        }
    }
}