0

我正在使用 JUNG 或 Prefuse 从 GraphML 源文件渲染图形。现在另一个程序用新的节点和边定期更新这个源文件。我也想更新图表以反映这些变化。我在这两个 API 本身中都找不到任何让我这样做的东西(没有适当的刷新(TIMER)或重绘(TIMER)类型的方法)。这样做的一种方法可能是在一段时间后终止 JFrame 并再次重做整个数据加载、可视化和渲染过程,但这对我来说似乎不合适。

所以问题是,什么是尽可能简单和快速地做到这一点的最佳方法?谢谢 :)

4

2 回答 2

1

“定期”检查源文件。如果你挂在f文件的句柄上,你可以查询f.lastModified(),如果自上次检查以来其他程序已经完成了它的脏工作,更新!如果其他程序仅编写更新文件(如果您有能力进行更改,这将是明智的 - 更少的文件要读取,确切地知道要在模型中更改什么等),则适用类似的解决方案。

“定期”有点棘手-您的情况可能很简单,以至于“每X(毫秒)秒检查一次”就可以了。Java 中的周期性任务可以通过多种方式实现 - 参见,例如this other question

JUNG 在更新演示中重新渲染/重新绘制,例如这个。他们文档中链接的教程(pdf) 涵盖了第 5 节中的动态更新(该部分是关于交互性的,但在出现新信息时进行更新的必要条件都已涵盖)。

于 2012-04-26T16:35:00.763 回答
0

JUNG 提供了允许你监听变化的包装器(ObservableGraph)。

收到更新通知后,您必须更新布局,然后刷新可视化。后者以 Swing 的常用方式完成。

于 2012-04-26T16:01:33.473 回答