Диаграммы Ваадина: круговая диаграмма не обновляется динамически

Я создал круговую диаграмму Ваадина со следующим кодом.

Chart chart = new Chart(ChartType.PIE);
DataSeries dataSeries = new DataSeries("Logins");
chart.getConfiguration().setSeries(dataSeries);

Мне нужно динамически обновлять мою диаграмму. Я пробовал следовать (этот код запускается всякий раз, когда доступны новые данные).

добавление нового товара:

dataSeries.add(new DataSeriesItem("New item", value), true, false);

обновление существующего элемента:

DataSeriesItem dataSeriesItem = dataSeries.get(0);
dataSeriesItem.setY(newValue);
dataSeries.update(dataSeriesItem);

Но ничего из вышеперечисленного не помогло.

Единственное решение, которое я смог найти, - это очистить диаграмму (chart.clear()), повторно заполнить ряд данных и заново нарисовать диаграмму (chart.drawChart()).

Этот метод не является оптимальным, так как он перерисовывает диаграмму, а также теряется выбор на диаграмме.

Поддерживает ли круговая диаграмма динамическое обновление? Может ли кто-нибудь предложить способ исправить это?


person Lahiru Chandima    schedule 19.06.2016    source источник


Ответы (4)


Попробуйте позвонить chart.getConfiguration().addSeries(dataSeries) перед обновлением элементов. Если это не сработает, я думаю, вам следует перерисовать диаграмму.

person Víctor Gómez    schedule 20.06.2016

У меня была такая же проблема, и я исправил ее с помощью chart.drawChart() после обновления ряда данных в конфигурациях (chart.getConfiguration.setSeries(newSeries)). В моем случае (версия vaadin 7.6.3) chart.clear() не требовалось.

Есть и другие более сложные способы, такие как плагин vaadin-push, которые я не счел необходимыми в моем случае.

person Youness    schedule 18.01.2017

Я знаю, что это старый вопрос, но я расскажу, как я решил эту проблему, в Chart Pie в DChart 1.7.0.

DataSeries dataSeries = new DataSeries(); 

dataSeries.newSeries();
dataSeries.add( "Food", 500);
dataSeries.add( "Clothes", 1000);

chart.setDataSeries(dataSeries);
chart.show(); //this will update the chart in the browser;
person Weles    schedule 15.03.2017

Поздно к вопросу, но я столкнулся с аналогичной проблемой в 2020 году, я решил ее, используя приведенный ниже код:

dataSeries.clear();
dataSeries.add(new DataSeriesItem("Expense", 120));
dataSeries.add(new DataSeriesItem("Saving", 20));
dataSeries.add(new DataSeriesItem("Balance", 100));
chart.getConfiguration().setSeries(dataSeries);
chart.drawChart();
person code_mechanic    schedule 04.07.2020