将TreeView与多个嵌套的Observable列表同步

时间:2014-07-12 09:40:40

标签: java javafx treeview javafx-8 observablelist

我有ObservableLists ObservableLists的ObservableList ......

它基本上下降了4个级别。

目标有一个

列表

目标有一个

列表

策略有一个

列表

Tactic有一个

列表

任务

显然,这看起来像是设置TreeView以显示此数据的完美方案。怎么做才能使结构中的任何更改也出现在TreeView上?

我认为目标将是根节点。每当将一个目标添加到其列表中时,我们就可以监听它并提醒刚刚创建了一个目标的目标。我应该如何以及在何处设置此侦听器?我是否提醒目标?或者我是否提醒某些静态实用程序类更新其TreeView?

1 个答案:

答案 0 :(得分:1)

使用ObservableList并添加Listeners,您可以轻松完成任务。

假设您在目标上放置了一个监听器。然后你会看一些Objective的变化。如果发生了更改(例如添加了一个目标),您将使用特定目标(例如使用Map)将TreeItem作为目标,然后向其中添加一个子项。

当然,你可以通过这样的方法简化你的工作:

private void addObjective(TreeItem<Object> specificGoal, List<Strategy > objective){
    TreeItem<Object> objectiveTreeItem = new TreeItem<>(objective);

    for(List<Tactic> strategy: objective){
        addStrategy(objectiveTreeItem, strategy);
    }
    specificGoal.getChildren().add(objectiveTreeItem);
}

为每个图层设置方法。

当然,如果数据量很小,您只需擦除TreeView项目,然后重新启动用于使用更新的List创建它的方法。更简单但没有优化。