3

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

NFO 制造商应用程序

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

我的问题

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

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

代码在GitHub 上

4

1 回答 1

2

我认为这是因为 updateItem 方法仅在 TreeCell 的项目被替换而不是修改时才被调用。您需要一种方法来通知 TreeCell 实例其项目的属性已更改。

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

如果您想要示例,我可以尝试提供一个。

编辑:一个小例子。我修改了情节叶子的文本。当然,您需要将 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());
        }
    }
}
于 2012-07-25T07:09:38.150 回答