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()
метод и добавление ваших данных там.