首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaFX LineChart -绘制数组

JavaFX LineChart -绘制数组
EN

Stack Overflow用户
提问于 2014-04-29 21:31:32
回答 3查看 3.9K关注 0票数 4

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

LineChart的所有示例和帮助都表明,必须使用XYChart.Series.getData().add(new XYChart.Data(X, Y))逐点添加数据,其中X为索引,Y为Floatindex的值。这非常非常慢,因为这种方法需要遍历数组,但它有效。我想让LineChart更新到30 1FPS,但它现在还不到1FPS :/

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

编辑(找到解决方案)

srm,这个概念有效!

在第一次运行时,只需在XYChart.Series中填充new XYChart.Data(X,Y)即可。然后循环使用XYChart.Series.get(index).setYData(NewValue)进行获取和更新。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-29 22:00:51

好吧,必须删除我之前的文章,因为我不能阅读。

你试过使用XYChartBuilder吗?看起来,您可以使用一个可能在运行时数据(ObservableList> x)期间更改的初始数据点列表(我还没有使用它)--我的第一个输入是,您只创建了其中的一个列表,然后只更改了您需要的数据点(虽然我在这里可能完全错了)。试试看,我很想听听这个!

票数 2
EN

Stack Overflow用户

发布于 2016-02-18 16:06:19

下面是在启动时非常快地加载系列数据的另一种方法:

代码语言:javascript
复制
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);
票数 2
EN

Stack Overflow用户

发布于 2014-04-29 21:57:50

这个 constructor将图表的序列作为其参数之一。

您可以先构造这个系列,然后再构造LineChart

首先将Float[]转换为List

代码语言:javascript
复制
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

代码语言:javascript
复制
XYChart.Series<Int,Float> series = new XYChart.Series<>();
series.getData().addAll(seriesData);
LineChart<Int,Float> chart = new LineChart<>(...axes...,FXCollections.observableArrayList(series));

正如brian建议的那样,您也可以在图表创建之后添加更多的系列,或者添加另一个系列,方法是使用 method并在那里添加数据。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23375681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档