我正在学习JavaFX,我正在尝试创建一个显示折线图的应用程序,并允许用户更改某些变量,然后更改绘制的线条。我这样做的方法是删除系列(和系列中的数据点),然后重新填充系列并再次添加它们,如下所示。
Exception in thread "JavaFX Application Thread" java.lang.IllegalArgumentException: Duplicate series added
但是,当我这样做时,我收到以下错误:
addAll()
第二次调用toString()
时就会发生这种情况。当我在调用linePlot.getData()
之后打印clear()
{{1}}函数时,它会打印一个空数组,所以看起来应该没有问题。我的猜测是,这不是改变线路的正确方法,但这是我的新手尝试。看起来我应该只能更改系列中的数据(不删除和读取它们),但我的情节不会更新。
任何想法/建议?
答案 0 :(得分:5)
如果您有以下问题,也可能发生此问题:
animated="true"
为折线图设置。
当类 XYChart 检查重复项时,它会从 displayedSeries 中获取所有系列,并将它们与现有数据系列进行比较。在此期间,如果您已清除数据,系列仍将位于显示的系列中,因为延长了淡入淡出效果,并导致"重复系列添加& #34;错误。
如果是这种情况,只需设置:
animated="false"
答案 1 :(得分:0)
我认为这是一个JavaFX错误。我有同样的问题。我解决了#34;它删除图表(在你的情况下为linePlot)并再次创建它。
答案 2 :(得分:0)
使用动画更改图表数据时,这似乎是一个错误。正如@Anurag所说,如果关闭动画,你将不会遇到这个问题。
e.g。
linePlot.setAnimated(false);
答案 3 :(得分:0)
创建图表时,最初只将系列添加一次即可。
更新数据而无需再次添加系列:
public void plot(double[] xArr, double[] yExactArr, double[] yApproxArr) {
linePlot.getData().clear();
if (!exactValues.getData().isEmpty()) {
exactValues.getData().remove(0, xArr.length - 1);
approxValues.getData().remove(0, xArr.length - 1);
}
for (int i = 0; i < xArr.length; i++) {
exactValues.getData().add(new XYChart.Data(xArr[i], yExactArr[i]));
approxValues.getData().add(new XYChart.Data(xArr[i], yApproxArr[i]));
}
//linePlot.getData().addAll(exactValues, approxValues);
mainStage.show();
}