JUNG树布局动态更新

Posted

技术标签:

【中文标题】JUNG树布局动态更新【英文标题】:JUNG Tree Layout dynamic update 【发布时间】:2013-06-19 17:34:00 【问题描述】:

我正在使用 JUNG 中的 TreeLayout 作为我的图表。用户能够对图表进行更改,然后它应该更新并显示更改。

为了启用更新,我再次创建图表并使用它设置布局:

graph = new DelegateForest<String, Integer>(
          new DirectedOrderedSparseMultigraph<String, Integer>());
createGraph()    //adds the vertices and edges to the graph
layout.setGraph(graph);
vv.repaint();

这确实将树更新为应有的状态,但树布局丢失了。

大多数节点确实出现在正确的位置,但叶节点出现在随机位置。是否可以恢复第一次创建图形时获得的树结构?

【问题讨论】:

我相信它们乱序的原因是因为 JUNG 的 TreeLayout 将顶点存储在 HashMap 中(不保证顺序)。我相信如果你复制 JUNG 的 TreeLayout 代码并用 TreeHashMaps 替换它会起作用。 sdasdadas,这是不正确的。见下文。 【参考方案1】:

您需要使用更新的图形创建一个新的 TreeLayout 实例,并使用新的 TreeLayout 实例更新可视化。您在随机位置获取新节点,因为您拥有的 TreeLayout 实例尚未为它们计算位置。

对于某些类型的图形更新(仅限添加),这可以提高效率。但现在它在我们的名单上并不高。

【讨论】:

我不太确定我理解为什么setGraph 不会更新TreeLayout。他们都分配了字段graph,并且都调用了buildTree()。构造函数唯一与setGraph 方法不同的是设置间距。 我看的更远了,你是对的。这是因为TreeLayout 维护了一个已定位的顶点Set。如果你有时间,你介意解释一下为什么布局需要Set吗?

以上是关于JUNG树布局动态更新的主要内容,如果未能解决你的问题,请参考以下文章

自定义 tableviewcell 动态高度未根据约束更新(以编程方式自动布局)

我如何告诉我所有的自动布局约束来更新自己? (例如,当用户更新他们的系统大小/动态类型时)?

动态更新 Nuxt 布局时遇到问题

移动端响应式布局,rem动态更新

anroid动态更新UI界面

iOS页面动态化—如何用JSON数据的原生页面摆脱低效的H5页面,来动态更新app页面样式