我正在用 jfreechart 创建一个大图。这个图表对于屏幕来说太大了,所以我想把它放在一个滚动窗格中。但是,当使用滚动条时,每次都会重新绘制完整的图形,这使得它非常慢。有解决方案吗?
谢谢,
巴特
我正在用 jfreechart 创建一个大图。这个图表对于屏幕来说太大了,所以我想把它放在一个滚动窗格中。但是,当使用滚动条时,每次都会重新绘制完整的图形,这使得它非常慢。有解决方案吗?
谢谢,
巴特
自己缓冲一下。在不在可见面板上的面板中呈现 JFreeChart,并将其用作滚动窗格中面板的缓冲区。然后您可以控制重绘事件以及同步两个面板的频率。
使用 JFreeChart,无论图表是否嵌入在 a 中,当从底层数据集中触发事件时,总是会重新绘制完整的图表JScrollPane
。
如果您的图表包含大量数据点并且经常更新,这一点尤其明显。您可以尝试一些“kludges”,让您的 UI 更具响应性;例如
SeriesDataset
您可以延迟触发 a 。SeriesChangeEvent
SeriesChangeEvent
,明显的缺点是您的 UI 不太“实时”。查看源代码可以发现 ChartPanel 构造函数采用可选的布尔参数,该参数指示它在重新绘制时使用图像缓冲区。我想这会有所帮助。
public ChartPanel(JFreeChart chart, boolean useBuffer);
我实际上认为问题不在于面板本身,而在于其他地方触发的其他一些事件。我确实在 jscrollpanes 中使用 ChartPanel 而没有这种行为。我的应用程序运行顺利。
同意 Adamsky,我的建议是停止在图表渲染中寻找问题,而是在数据集实现中寻找问题。