动态 javaFX 线图

Dynamic javaFX linechart

我的场景中有一个折线图,它在 it.each 中显示了几个系列,第二个一两个数据被添加到系列中并显示在图表上。问题是一段时间后,程序 运行 数据越来越多,图表几乎变得 useless.I 只想显示图表中的最后 50 个数据,现在不再显示更旧的数据。 我采用的方法是为 XAxis 禁用 "Force Zero in the range" 并在每次数据插入时从系列中删除索引 50 数据。但我遇到了 ConcurrentModificationException 和 indexOutofBoundaryException。这个问题有更好的方法吗? 这是我的图表和系列以及数据插入代码。

gxSeries = new XYChart.Series<Number, Number>();
 gySeries = new XYChart.Series<Number, Number>();
 gzSeries = new XYChart.Series<Number, Number>();
gxSeries.setName("p(Rad/s)");
gySeries.setName("q(Rad/s)");
gzSeries.setName("r(Rad/s)");
gSeriesChart.getData().add(gxSeries);
gSeriesChart.getData().add(gySeries);
gSeriesChart.getData().add(gzSeries);
    gSeriesChart.setCreateSymbols(false);
          gSeriesChart.getStyleClass().add("thick-chart");
    gSeriesX.setForceZeroInRange(false);

gxSeries,... 是系列 gSeriesChart 是折线图 gSeriesX 是 xAxis

 gxSeries.getData().add(new XYChart.Data<Number, Number>(tele.missionTime/1000.0, tele.gx));
gySeries.getData().add(new XYChart.Data<Number, Number>(tele.missionTime/1000.0, tele.gy));
gzSeries.getData().add(new XYChart.Data<Number, Number>(tele.missionTime/1000.0, tele.gz));

检查您的集合中的数据集数量,如果您的集合中有 51 个数据集,请删除最旧的一个。像 yourSeries.getData().remove(0) 这样的东西应该是可行的; 发生 IOOB 异常是因为您只有从 0 到 49 的索引。最旧的值是索引为 0 的值。 '希望有所帮助!