2015-08-22 7 views
1

В настоящее время я изучаю JavaFX и пытаюсь создать приложение, которое отображает линейную диаграмму и позволяет пользователю изменять определенные переменные, которые затем меняют построенную линию. То, как я это делаю, - удалить серию (и точки данных внутри серии), а затем снова заполнить серию и добавить их снова, как показано ниже.JavaFX Duplicate Series Added

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() называется второй раз. Когда я печатаю функцию toString()linePlot.getData() после вызова clear(), он печатает пустой массив, поэтому кажется, что проблем не должно быть. Я предполагаю, что это не правильный способ изменения строки, но это моя попытка новичка. Похоже, я должен иметь возможность просто изменять данные внутри серии (не удаляя и не считывая их), но потом мой сюжет не обновляется.

Любые идеи/рекомендации?

+0

Похоже, он должен работать (если вы случайно не имеют '' exactValues' и approxValues' указывая на тот же список). Можете ли вы создать [MCVE] (http://stackoverflow.com/help/mcve), который демонстрирует проблему? –

ответ

0

Я думаю, что это ошибка JavaFX. У меня такая же проблема. Я «решил» его удалить диаграмму (linePlot в вашем случае) и создать ее снова.

0

Эта проблема также может произойти, если у вас есть:

animated="true" 

набор для вашей линии диаграммы.

Когда класс XYChart проверяет дубли, он принимает все серии от displayedSeries и сравнивает их с существующей серией данных. В течение этого времени, если вы очистили данные, серия по-прежнему будет отображаться в отображаемых страницах из-за пролонгированного эффекта затухания и привести к ошибке «дублируемая серия добавлена».

Если это так, то просто установить:

animated="false" 
Смежные вопросы