我使用JUNG或Prefuse从GraphML源文件渲染图形。现在,另一个程序会定期使用新节点和边缘更新此源文件。我想更新图表以反映这些变化。我无法在两个API中找到任何可以让我这样做的东西(没有适当的刷新(TIMER)或重绘(TIMER)方法)。这样做的一种方法可能是在一段时间后终止JFrame并重新重做整个数据加载,可视化和渲染过程,但这对我来说似乎不合适。
所以问题是,尽可能简单快速地做到这一点的最佳方法是什么?谢谢:))
答案 0 :(得分:1)
“定期”检查源文件。如果您挂起文件的句柄f
,您可以查询f.lastModified()
,如果自上次检查后其他程序已完成其脏工作,请更新!如果其他程序只编写更新文件(如果您有权进行更改,那将是明智的 - 更少阅读文件,确切知道模型中要更改的内容等),类似的解决方案也适用。
“定期”是一个有点粘性的检票口 - 你的情况可能很简单,“每隔X(毫秒),检查”就行了。 Java中的周期性任务可以以各种方式实现 - 例如,参见this other question
JUNG重新渲染/重新绘制更新演示,例如: this one。在他们的文档中链接的tutorial(pdf)涵盖了第5部分中的动态更新(该部分是关于交互性的,但是当提供新信息时需要进行更新)。
答案 1 :(得分:0)
JUNG提供包装器(ObservableGraph),让您可以听取更改。
一旦收到更新通知,您就必须更新布局,然后刷新可视化。后者以Swing的常用方式完成。