2012-07-24 133 views
2

我正在开发一个简单的应用程序生成.nfo文件,这是简单的XML文件。所以我有一个看起来像这样MasterView详细信息与树视图

NFO Maker Application

东西作为TreeView控件需要一个类型参数的应用程序,我创建了树的简单模型。这个模型封装了XML模型,因为这些只是叶子而不是节点。

我的问题

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

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

的代码是GitHub

回答

2

我认为这是因为只有当TreeCell的项目被替换的updateItem方法被调用,而不是改性。您需要的是一种通知TreeCell实例其项目属性已更改的方法。

例如,尝试将textProperty绑定到模型对象的所需属性,而不是使用setText方法修改您的treecell的文本。当然,您将需要更新您的模型以使用JavaFX Property和绑定 另一种解决方案可能是使用PropertyChangeListener,旧样式。

如果你想要的例子,我可以尝试提供一个。

编辑:一个小例子。我修改了Episode叶子的文字。当然,您需要将EpsiodeDetails类的插曲和标题属性移动到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()); 
     } 
    } 
} 
+0

Bindings.concat方法真的很棒。感谢您的宝贵意见。 – Muki 2012-07-25 15:52:39

+0

你的欢迎:) – Teocali 2012-07-25 19:34:24

相关问题