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 动态高度未根据约束更新(以编程方式自动布局)