Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jfreechart-根据更改的数据刷新图表_Java_Refresh_Jfreechart - Fatal编程技术网

Java Jfreechart-根据更改的数据刷新图表

Java Jfreechart-根据更改的数据刷新图表,java,refresh,jfreechart,Java,Refresh,Jfreechart,我想知道如果我们想“实时”更改某些数据,如何刷新图表。我的意思是,举例来说,我有一个3年的任务系列图表,我想用5年的时间改变3年。我希望图表立即更改 有什么更新图表之类的吗 我知道您可以说“获取您的TaskSeries,进行更改,它将自动刷新”,但我的TaskSeries是生成的,我无法轻松更改这些TaskSeries。这就是为什么我想找到一种方法来重新计算并重建整个图表。我没有找到一种简单的方法来更新JFreeChart“live”,因为JFreeChart的数据结构与我的数据结构非常不兼容。

我想知道如果我们想“实时”更改某些数据,如何刷新图表。我的意思是,举例来说,我有一个3年的任务系列图表,我想用5年的时间改变3年。我希望图表立即更改

有什么更新图表之类的吗


我知道您可以说“获取您的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初始化