Линейный график JavaFX не очищается должным образом - PullRequest
0 голосов
/ 12 мая 2019

В приведенном ниже примере вы можете видеть, что в зависимости от установленного флажка программа строит серии 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...