Обновление диаграммы JFX 13 не гладкое (привязка при переходе) - PullRequest
0 голосов
/ 09 марта 2020

Я читаю живые данные ЭЭГ с портативного сканера ЭЭГ и строю графики с помощью StackedAreaChart. Это выполняется на компьютере Windows 10 (последнее обновление) с использованием Java 13u2 и JFX 13.

ЭЭГ отправляет данные каждую секунду, которые обновляются на графике. Я делаю это, просто добавляя данные в конец диаграммы (для первых 20 записей), затем после 20 записей я удаляю запись с нулем и вычитаю 1 из всех значений x в серии (это временные ряды по оси X, так что это имеет смысл).

Однако переход на экране довольно грубый. Узлы на графике, по-видимому, бродят вокруг, прежде чем присоединиться к правильному положению, и в результате получается ... Русский секунда в al oop):

                        var eSenseData = eSenseChart.getData();
                        var brainwaveData = brainwaveChart.getData();
                        //If there are no series, add empty ones
                        if (eSenseData.isEmpty()) {
                            eSenseData.add(attention);
                            eSenseData.add(meditation);
                            //data.add(mentalEffort);
                            //data.add(familiarity);

                            brainwaveData.add(delta);
                            brainwaveData.add(theta);
                            brainwaveData.add(lowAlpha);
                            brainwaveData.add(highAlpha);
                            brainwaveData.add(lowBeta);
                            brainwaveData.add(highBeta);
                            brainwaveData.add(lowGamma);
                            brainwaveData.add(highGamma);
                        }
                        //Get Old Data, take most recent 20 entries and graph them
                        var acceptableEntries = 20;
                        //If the number of entries is less than acceptableEntries
                        if (eSenseData.get(0).getData().size() < acceptableEntries) {
                            eSenseData.get(0).getData().add(new Data<>(eSenseData.get(0).getData().size(), packet.getAttention()));
                            eSenseData.get(1).getData().add(new Data<>(eSenseData.get(1).getData().size(), packet.getMeditation()));
}
else {
                            setNew(eSenseData.get(0), new Data<>(20, packet.getAttention()));
                            setNew(eSenseData.get(1), new Data<>(20, packet.getMeditation()));
}

/**
     * Removes the first entry and adds the new one.
     *
     * @param series The series to use
     * @param value The value to add
     */
    private static <X, Y> void setNew(Series<Integer, Y> series, Data<Integer, Y> value) {
        series.getData().remove(0);
        series.getData().stream().forEach(data -> {
            data.setXValue(data.getXValue() - 1);
        });
        series.getData().add(value);
    }

ПРИМЕЧАНИЕ. Этот эффект «привязки» также возникает при создании диаграммы, но в меньшей степени.

Как мне решить эту проблему сделать переход более плавным?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...