Jfreechart - обновить график в соответствии с изменяющимися данными - PullRequest
10 голосов
/ 01 июня 2011

Я хотел бы знать, как обновить диаграмму, если мы хотим изменить «вживую» некоторые данные.Я имею в виду, например, у меня есть диаграмма с TaskSeries, которая появляется на 3 года, и я хотел бы изменить 3 года на 5 лет.Я хочу, чтобы график изменился немедленно.

Есть ли какая-то диаграмма обновлений или что-то в этом роде?

Я знаю, что вы могли бы сказать: «получите свои TaskSeries, внесите свои изменения, и это будетобновляется автоматически ", но мои TaskSeries созданы, и я не могу легко изменить их.Вот почему я хотел бы найти способ пересчитать и перестроить весь график.

Ответы [ 6 ]

7 голосов
/ 01 июня 2011

Метод add() TaskSeries автоматически отправляет SeriesChangeEvent всем зарегистрированным слушателям, например, CategoryPlot. В этом примере , DynamicTimeSeriesCollection реализуется SeriesChangeEvent. В этом случае XYPlot на графике является зарегистрированным слушателем.

5 голосов
/ 04 сентября 2014

У меня тоже была эта проблема с XYPlot.Я нашел обходной путь, сбросив набор данных:

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

, это безумие, но оно работает ...

Примечание: chart.setNotify(true), похоже, ничего не делает.

4 голосов
/ 04 июля 2011

У меня была эта проблема;Я сделал это, используя это:

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 голосов
/ 16 августа 2016

То, что работало со мной, было следующим:

//reset with new dataset
chart().setDataset(dataset);
repaint the ChartPanel that contains the JFreeChart
chartPanel.repaint();
0 голосов
/ 27 марта 2016
// 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 голосов
/ 01 июня 2011

Я не нашел простого способа обновить JFreeChart «вживую», поскольку структура данных jfreechart очень несовместима с моей структурой данных.Поэтому я создаю метод redraw () - мой собственный метод, который собирает данные из моей модели dataModel, создает модель данных JFreeChart и устанавливает новую диаграмму.

Это также создает ощущение «живого» обновления, а такжеэто очень некрасиво.

...