3

我正在用 jfreechart 创建一个大图。这个图表对于屏幕来说太大了,所以我想把它放在一个滚动窗格中。但是,当使用滚动条时,每次都会重新绘制完整的图形,这使得它非常慢。有解决方案吗?

谢谢,

巴特

4

4 回答 4

1

自己缓冲一下。在不在可见面板上的面板中呈现 JFreeChart,并将其用作滚动窗格中面板的缓冲区。然后您可以控制重绘事件以及同步两个面板的频率。

于 2009-11-13T15:14:07.263 回答
0

使用 JFreeChart,无论图表是否嵌入在 a 中,当从底层数据集中触发事件时,总是会重新绘制完整的图表JScrollPane

如果您的图表包含大量数据点并且经常更新,这一点尤其明显。您可以尝试一些“kludges”,让您的 UI 更具响应性;例如

  • 如果您的基础数据集已更新(例如),如果当前未显示图表,SeriesDataset您可以延迟触发 a 。SeriesChangeEvent
  • 同样,您可以通过仅每隔 N 秒而不是在每个事件上定期触发来限制多个更新SeriesChangeEvent,明显的缺点是您的 UI 不太“实时”。
于 2009-11-13T14:54:12.040 回答
0

查看源代码可以发现 ChartPanel 构造函数采用可选的布尔参数,该参数指示它在重新绘制时使用图像缓冲区。我想这会有所帮助。

public ChartPanel(JFreeChart chart, boolean useBuffer);
于 2009-11-13T14:25:58.587 回答
0

我实际上认为问题不在于面板本身,而在于其他地方触发的其他一些事件。我确实在 jscrollpanes 中使用 ChartPanel 而没有这种行为。我的应用程序运行顺利。

同意 Adamsky,我的建议是停止在图表渲染中寻找问题,而是在数据集实现中寻找问题。

于 2009-11-13T15:25:22.903 回答