Jfreechart - Refresh a chart according to changing data

后端 未结 6 1605
旧时难觅i
旧时难觅i 2020-12-16 18:23

I would like to know how to refresh a chart if we want to change \"in live\" some piece of data. I mean for instance, I have a chart with a TaskSeries which appears on 3 yea

相关标签:
6条回答
  • 2020-12-16 18:58

    I had this issue; I did it using this:

    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
    }
    
    0 讨论(0)
  • 2020-12-16 18:59

    What worked with me was the following:

    //reset with new dataset
    chart().setDataset(dataset);
    repaint the ChartPanel that contains the JFreeChart
    chartPanel.repaint();
    
    0 讨论(0)
  • 2020-12-16 19:00
    // 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();
    
    0 讨论(0)
  • 2020-12-16 19:02

    The add() method of TaskSeries automatically sends a SeriesChangeEvent to all registered listeners, e.g. CategoryPlot. In this example, DynamicTimeSeriesCollection implements SeriesChangeEvent. In this case, the chart's XYPlot is a registered listener.

    0 讨论(0)
  • 2020-12-16 19:09

    I haven't found an easy way to update a JFreeChart "live", since the data-structure of jfreechart is very incompatible to my data-structure. So I build a redraw()-Method of my own, that collects the data from my dataModel, build up a JFreeChart dataModel and set the chart new.

    This gives the feeling of a "live" update, also it is very ugly.

    0 讨论(0)
  • 2020-12-16 19:24

    I had this issue too with an XYPlot. I found a workaround by resetting the dataset:

    chart.getXYPlot().setDataset(chart.getXYPlot().getDataset());
    

    that's crazy but it works...

    Note: chart.setNotify(true) seems to do nothing.

    0 讨论(0)
提交回复
热议问题