JavaFX LineChart - рисовать массив

Я пытаюсь отобразить данные пользователю с LineChart в JavaFX. У меня есть массив Float (не примитив, объект, как в Float[]), который можно добавить, который может быть длиной от 512 до 4096 баллов.

Все примеры и помощь для LineChart показать, что данные должны быть добавлены точка за точкой, используя XYChart.Series.getData().add(new XYChart.Data(X, Y)) где X будет индексом, а Y будет значением в Float[index]. Это действительно очень медленно, так как этот подход требует циклического прохождения по массиву, но он работает. Я хотел бы LineChart обновлять со скоростью 30 кадров в секунду, но сейчас это менее 1FPS:/

Есть ли более быстрый способ, где я могу просто бросить массив на JavaFX LineChart класс и сделать его без прохождения и добавления каждой точки?

РЕДАКТИРОВАТЬ (Решение найдено):

SRM, эта концепция работает!

При первом запуске просто заполните XYChart.Series с new XYChart.Data(X,Y), Затем переберите и получите и обновите, используя XYChart.Series.get(index).setYData(NewValue)

3 ответа

Решение

Хорошо, пришлось удалить мой предыдущий пост из-за невозможности прочитать.

Вы пытались использовать XYChartBuilder? Похоже, вы можете использовать начальный список точек данных, которые могут быть изменены во время выполнения данных (ObservableList> x). Я не работал с тем, что моя первая идея заключается в том, что вы создаете только один список из этого, а затем меняете только точки данных вам нужно (хотя я могу быть совершенно не прав здесь). Попробуй и увидишь, я очень хочу услышать об этом!

Вот еще один способ очень быстрой загрузки серийных данных при запуске:

ObservableList<XYChart.Data<Number, Number>> data = FXCollections.<XYChart.Data<Number, Number>>observableArrayList();
for (int i = 0; i < 10000; i++)
    data.add(new XYChart.Data<>(Math.random(), Math.random()));
XYChart.Series series = new XYChart.Series(data);
chart.getData().add(series);

Это LineChart Конструктор принимает серию диаграммы в качестве одного из аргументов.

Вы можете сначала построить серию, а затем построить LineChart,

Сначала конвертируй свой Float[] к List

List<XYChart.Data<Int,Float>> seriesData = new ArrayList<>();
for(int i=0;i<data.length;++i)
    seriesData.add(new XYChart.Data(i,data[i]));

Затем создайте свой LineChart

XYChart.Series<Int,Float> series = new XYChart.Series<>();
series.getData().addAll(seriesData);
LineChart<Int,Float> chart = new LineChart<>(...axes...,FXCollections.observableArrayList(series));

Как предполагает Брайан, вы также можете добавить дополнительные серии или добавить другие серии после создания диаграммы с помощью XYChart.getData() метод и добавление ваших данных там.

Другие вопросы по тегам