JavaFX重复系列已添加

时间:2015-08-22 01:39:19

标签: java javafx linechart

我正在学习JavaFX,我正在尝试创建一个显示折线图的应用程序,并允许用户更改某些变量,然后更改绘制的线条。我这样做的方法是删除系列(和系列中的数据点),然后重新填充系列并再次添加它们,如下所示。

    Exception in thread "JavaFX Application Thread" java.lang.IllegalArgumentException: Duplicate series added

但是,当我这样做时,我收到以下错误:

addAll()

第二次调用toString()时就会发生这种情况。当我在调用linePlot.getData()之后打印clear() {{1}}函数时,它会打印一个空数组,所以看起来应该没有问题。我的猜测是,这不是改变线路的正确方法,但这是我的新手尝试。看起来我应该只能更改系列中的数据(不删除和读取它们),但我的情节不会更新。

任何想法/建议?

4 个答案:

答案 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();
}