Как обновить данные графика? Не вызовет ли мой способ утечку памяти?

Есть программа, которая рисует график по нажатию на кнопку. Обычный LineChart по сути, вся загвоздка в данных. В общем в момент запуска приложение выглядит так:

введите сюда описание изображения

Дальше вводим данные в таблицу и нажимаем на кнопку "аппроксимировать", например введем координаты нескольких точек параболы, получим:

введите сюда описание изображения

Теперь по нажатию на ту же кнопку еще раз, надо обновить данные графика получилось это реализовать в обработчике кнопки:

    private LineChart mainChart; // сначала null

    // в обработчике кнопки строим еще один график graphicsArea и ...

    if (mainChart == null) mainChart = graphicArea; // Если на кнопку нажали первый раз, присваиваем полю график

        else {
            mainLayout.getChildren().remove(mainChart); // иначе график уже есть убираем его
        mainChart = graphicArea; и присваиваем новый объект нашему полю
        }

        mainLayout.getChildren().add(mainChart); // добавляем на сцену

Вот что получилось:

введите сюда описание изображения

Но мне кажется, что я использовал "костыль" и может случиться утечка памяти, если таким образом обновить график скажем 1000 раз за один цикл работы приложения (создать 1000 graphicArea). Так ли это? Нет ли способа сделать обновление данных графика через объект LineChart, Series или XYChart.Data Или лучше оставить условие, пользуясь принципом "Работает — не трогай!" Нужен совет.


Ответы (1 шт):

Автор решения: Asad Ganiev

Для обновления графика достаточно просто сделать:

chart.getData().clear();
chart.getData().add(series);

То есть вы просто очищаете данные графика и добавляете новые.

Если Вы просто в конце добавляете новые данные, то и очистить не обязательно. Вы можете просто в series добавить новые данные, и график сам обновится.

→ Ссылка