В приведенном ниже примере вы можете видеть, что в зависимости от установленного флажка программа строит серии aSeries или bSeries.В первый раз график строится нормально, но когда я пытаюсь построить график снова, он получает исключение java.lang.IllegalArgumentException: добавлена повторяющаяся серия.Перед повторным сюжетом я очищаю предыдущие серии.
Я проверил решение на этой странице Добавлена серия дубликатов JavaFX , я отключил анимацию, но это мне не помогло.
Такжепроверьте это: Диаграмма JavaFX - Java.lang.IllegalArgumentException: добавлен повторяющийся ряд , но я точно не знаю, в чем разница, я думаю, что я делаю то же самое.
Пример:
public class MainController implements Initializable {
XYChart.Series<String, Number> aSeries = new XYChart.Series<String, Number>();
XYChart.Series<String, Number> bSeries = new XYChart.Series<String, Number>();
@FXML
private LineChart<String, Number> lineChart;
@FXML
private CheckBox aCheckBox, bCheckBox;
@Override
public void initialize(URL location, ResourceBundle resources) {
lineChart.setAnimated(false);
aCheckBox.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
chartConfiguration();
}
});
bCheckBox.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
chartConfiguration();
}
});
}
@SuppressWarnings("unchecked")
private void chartConfiguration() {
if (!aCheckBox.isSelected() && aSeries.getData().size() > 0) {
aSeries.getData().clear();
}
if (!bCheckBox.isSelected() && bSeries.getData().size() > 0) {
bSeries.getData().clear();
}
if (aCheckBox.isSelected() && aSeries.getData().size() == 0) {
aSeries.getData().add(new XYChart.Data<String, Number>("Jan", 50.0));
aSeries.getData().add(new XYChart.Data<String, Number>("Feb", 70.0));
lineChart.getData().addAll(aSeries);
}
if (bCheckBox.isSelected() && bSeries.getData().size() == 0) {
bSeries.getData().add(new XYChart.Data<String, Number>("Jan", 30.0));
bSeries.getData().add(new XYChart.Data<String, Number>("Feb", 50.0));
lineChart.getData().addAll(bSeries);
}
}
}
Мой вопрос: почему программа добавляет Duplicate-серию и как я могу это исправить?
EDIT:
Как Седрик предлагает изменить код, но после одной прорисовки, когдая пытаюсь построить следующий розыгрыш, ничего не произошло ...
Изменить код ниже:
}
@SuppressWarnings("unchecked")
private void chartConfiguration() {
if (!aCheckBox.isSelected() && aSeries.getData().size() > 0) {
//aSeries.getData().clear();
lineChart.getData().clear();
}
if (!bCheckBox.isSelected() && bSeries.getData().size() > 0) {
//bSeries.getData().clear();
lineChart.getData().clear();
}
if (aCheckBox.isSelected() && aSeries.getData().size() == 0) {
aSeries.getData().add(new XYChart.Data<String, Number>("Jan", 50.0));
aSeries.getData().add(new XYChart.Data<String, Number>("Feb", 70.0));
lineChart.getData().addAll(aSeries);
}
if (bCheckBox.isSelected() && bSeries.getData().size() == 0) {
bSeries.getData().add(new XYChart.Data<String, Number>("Jan", 30.0));
bSeries.getData().add(new XYChart.Data<String, Number>("Feb", 50.0));
lineChart.getData().addAll(bSeries);
}
}