Java 将TreeView与多个嵌套的ObservableList同步

Java 将TreeView与多个嵌套的ObservableList同步,java,javafx,treeview,javafx-8,observablelist,Java,Javafx,Treeview,Javafx 8,Observablelist,我有一个观察者,一个观察者,一个观察者 它基本上下降了4级 目标有一个列表 Objective有一个 战略有一个清单 战术有一个列表 任务 显然,这看起来是设置树视图以显示此数据的完美方案。如何才能使结构中的任何更改也显示在树视图上 我认为目标将是根节点。每当一个目标被添加到它的列表中,我们都可以监听它,并提醒目标刚刚创建了一个目标。但是,我应该如何以及在何处设置此侦听器?我是否提醒目标?或者我要提醒某个静态实用程序类更新其TreeView吗?使用ObservableList并添加侦听器,您可以

我有一个观察者,一个观察者,一个观察者

它基本上下降了4级

目标有一个列表

Objective有一个

战略有一个清单

战术有一个列表

任务

显然,这看起来是设置树视图以显示此数据的完美方案。如何才能使结构中的任何更改也显示在树视图上


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

使用ObservableList并添加侦听器,您可以轻松完成您的任务

假设你在目标上放了一个听众。然后你会看到一些目标的变化。如果发生了更改(例如添加了一个目标),您将针对特定目标使用的树项(例如地图),然后向其添加一个子项

当然,您可以通过以下方法简化您的工作:

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);
}
private void addObjective(TreeItem specific objective,List objective){
TreeItem objectiveTreeItem=新的TreeItem(目标);
用于(列表策略:目标){
添加策略(objectiveTreeItem,策略);
}
specificGoal.getChildren().add(objectiveTreeItem);
}
为每个层都有一个方法


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

通过向每个ObservableList添加侦听器,我可以添加和删除TreeItems。但是,更改侦听器不会捕获项的更新。如果我更改了一个目标的名称,我希望树状视图也能反映这种更改。但是怎么做呢?你的听众只会记录列表上的变化。添加或删除项目。如果您想在对象内部发生变化时做出反应,我建议您查看事件()。例如,当您更改一个目标的名称时,您可以触发一个事件(自定义类扩展事件),将更改的内容放在该事件中,等等。或者您可以在自定义TreeCell中侦听一些属性(如果您的目标类使用Javafx属性)。非常感谢!我将研究如何使用它。