【发布时间】:2015-11-16 01:18:46
【问题描述】:
我目前正在学习 JavaFX,并正在尝试创建一个显示折线图的应用程序,并允许用户更改某些变量,然后更改绘制的线。我这样做的方法是删除系列(以及系列中的数据点),然后重新填充系列并再次添加它们,如下所示。
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();
}
但是,当我这样做时,我收到以下错误:
Exception in thread "JavaFX Application Thread" java.lang.IllegalArgumentException: Duplicate series added
一旦第二次调用addAll(),就会发生这种情况。当我在调用clear() 之后打印linePlot.getData() 的toString() 函数时,它会打印一个空数组,所以看起来应该没有问题。我的猜测是这不是改变线路的正确方法,但这是我的新手尝试。似乎我应该能够只更改系列中的数据(无需删除和读取它们),但是我的情节不会更新。
有什么想法/建议吗?
【问题讨论】:
-
看起来应该可以工作(假设您没有无意中让
exactValues和approxValues指向同一个列表)。你能创建一个MCVE 来演示这个问题吗?