JavaFX线条图-绘制数组

JavaFX线条图-绘制数组,java,javafx,Java,Javafx,我试图用JavaFX中的折线图向用户显示数据。我有一个浮点数组(不是原语,对象,如Float[]),可以添加,长度可以是512到4096点 LineChart的所有示例和帮助都表明,必须使用XYChart.Series.getData().add(新的XYChart.data(X,Y))逐点添加数据,其中X是索引,Y是浮点[index]的值。这真的很慢,因为这种方法需要在数组中循环,但它可以工作。我希望折线图以30FPS的速度更新,但现在它的速度小于1FPS:/ 有没有一种更快的方法可以让我在J

我试图用JavaFX中的
折线图向用户显示数据。我有一个浮点数组(不是原语,对象,如
Float[]
),可以添加,长度可以是512到4096点

LineChart
的所有示例和帮助都表明,必须使用
XYChart.Series.getData().add(新的XYChart.data(X,Y))
逐点添加数据,其中X是索引,Y是浮点[index]的值。这真的很慢,因为这种方法需要在数组中循环,但它可以工作。我希望
折线图以30FPS的速度更新,但现在它的速度小于1FPS:/

有没有一种更快的方法可以让我在JavaFX
LineChart
类中抛出一个数组,让它在不循环和添加每个点的情况下绘制

编辑(找到解决方案)

srm,这个概念行得通

在第一次运行时,只需使用新的XYChart.Data(X,Y)
填充
XYChart.Series
。然后使用
XYChart.Series.get(index.setYData(NewValue)

循环并获取和更新图表。这将图表的系列作为其参数之一

您可以先构造序列,然后构造
折线图

首先将您的
Float[]
转换为
列表

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

对于(inti=0;iOk),我不得不删除我以前的帖子,因为我不能阅读

您是否尝试过使用XYChartBuilder?看起来您可以使用运行时可能更改的数据点的初始列表 数据(可观察列表>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);
observeList data=FXCollections.observearraylist();
对于(int i=0;i<10000;i++)
添加(新的XYChart.data(Math.random(),Math.random());
XYChart.Series系列=新的XYChart.Series(数据);
chart.getData().add(系列);

您可以构建该系列,然后将其添加到现有折线图中。如果您想添加其他系列,此功能非常有用。
XYChartBuilder
(与大多数构建器一样)已弃用,可能不应使用。您可以轻松创建数组或
XYChart.Data
值的
列表
,并对其进行集体设置。感谢您的澄清。我没有意识到这一点(没有彻底阅读API)。
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);