JavaFX Duplicate Series Added

最后都变了- 提交于 2019-11-27 07:57:07

问题


I am currently learning JavaFX and am trying to create an app that shows a line chart and allows the user to change certain variables which then changes the plotted line. The way I do this is by removing the series (and the data points within the series) and then refilling the series and adding them again as shown below.

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

However, when I do this I am getting the following error:

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

This occurs as soon as addAll() is called the second time around. When I print the toString() function of linePlot.getData() after calling clear(), it prints an empty array, so it seems like there shouldn't be a problem. My guess is this isn't the proper way of going about changing the line but this is my newbie attempt. It seems like I should be able to just change the data within the series (without removing and readding them) but then my plot doesn't update.

Any ideas/recommendations?


回答1:


This issue could also happen if you have :

animated="true"

set for your line chart.

When the class XYChart checks for duplicates, it takes all the series from displayedSeries and compares them with your existing data series. During this time, if you have cleared the data, the series will still be in the displayedSeries due to the prolonged fading effect and result in the "duplicate series added" error.

If that is the case, simply set :

animated="false"



回答2:


I think it is a JavaFX bug. I had the same problem. I "solved" it removing the chart (linePlot in your case) and creating it again.




回答3:


This seems to be a bug when changing the chart data with animation. As mentioned by @Anurag if you turn off the animation you will not face the issue.

e.g.

linePlot.setAnimated(false);


来源:https://stackoverflow.com/questions/32151435/javafx-duplicate-series-added

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!