Java Jfreechart-根据更改的数据刷新图表
我想知道如果我们想“实时”更改某些数据,如何刷新图表。我的意思是,举例来说,我有一个3年的任务系列图表,我想用5年的时间改变3年。我希望图表立即更改 有什么更新图表之类的吗Java Jfreechart-根据更改的数据刷新图表,java,refresh,jfreechart,Java,Refresh,Jfreechart,我想知道如果我们想“实时”更改某些数据,如何刷新图表。我的意思是,举例来说,我有一个3年的任务系列图表,我想用5年的时间改变3年。我希望图表立即更改 有什么更新图表之类的吗 我知道您可以说“获取您的TaskSeries,进行更改,它将自动刷新”,但我的TaskSeries是生成的,我无法轻松更改这些TaskSeries。这就是为什么我想找到一种方法来重新计算并重建整个图表。我没有找到一种简单的方法来更新JFreeChart“live”,因为JFreeChart的数据结构与我的数据结构非常不兼容。
我知道您可以说“获取您的TaskSeries,进行更改,它将自动刷新”,但我的TaskSeries是生成的,我无法轻松更改这些TaskSeries。这就是为什么我想找到一种方法来重新计算并重建整个图表。我没有找到一种简单的方法来更新JFreeChart“live”,因为JFreeChart的数据结构与我的数据结构非常不兼容。因此,我构建了自己的redraw()方法,该方法从我的数据模型收集数据,构建JFreeChart数据模型并设置新图表
这给人一种“实时”更新的感觉,而且非常难看。的
add()
方法自动向所有注册的侦听器发送一个消息,例如CategoryPlot
。在这种情况下,dynamicTimeSecriesCollection
实现。在本例中,图表的XYPlot
是一个注册的侦听器。我有这个问题;我是这样做的:
private void refreshChart() {
jPanel_GraphicsTop.removeAll();
jPanel_GraphicsTop.revalidate(); // This removes the old chart
aChart = createChart();
aChart.removeLegend();
ChartPanel chartPanel = new ChartPanel(aChart);
jPanel_GraphicsTop.setLayout(new BorderLayout());
jPanel_GraphicsTop.add(chartPanel);
jPanel_GraphicsTop.repaint(); // This method makes the new chart appear
}
我对XYPlot也有这个问题。我通过重置数据集找到了解决方法:
chart.getXYPlot().setDataset(chart.getXYPlot().getDataset());
这太疯狂了,但它是有效的
注意:
chart.setNotify(true)
似乎什么都不做。对我有效的方法如下:
// create a chart
ChartFrame mychartframe = new ChartFrame("my charts", chart);
// some other stuff ...
// somewhere else in a code far far away
mychartframe.getChartPanel().getChart().fireChartChanged();
//reset with new dataset
chart().setDataset(dataset);
repaint the ChartPanel that contains the JFreeChart
chartPanel.repaint();
我发现JFreeChart的方法与Swing的非常兼容。
XYPlot
是否注册为默认情况下由ChartFactory
创建JFreeChart
时侦听SeriesChangeEvent
的侦听器(也就是说,我不需要自己注册)?你的回答在两天内帮了我两次忙。谢谢间接:将系列更改转发到绘图,绘图(自动)侦听数据集
更改。您有任何错误,但这是一个很好的解决方案1.-刷新图表(2.-aChart初始化