JavaFX折线图无法正确清除

时间:2019-05-12 17:14:19

标签: java exception javafx charts

在下面的示例中,您可以看到,根据选中的复选框,对aSeries或bSeries系列进行程序绘制。第一次绘制图表是好的,但是当我再次尝试绘制图表时,它会收到异常java.lang.IllegalArgumentException:添加了重复的序列。在再次绘图之前,我会清理以前的系列。

我在JavaFX Duplicate Series Added页上检查了解决方案,我关闭了动画,但无济于事。

也请检查以下内容: JavaFX Chart - Java.lang.IllegalArgumentException : Duplicate series added 但是我不完全知道我在做同样的事情。

示例:

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

我的问题是为什么程序会添加重复的重复序列,我该如何解决?

编辑:

就像Sedrik一样,我建议修改代码,但是在我尝试绘制下一个绘制时进行了一次绘制之后,什么也没发生...

在下面更改代码:

}

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

0 个答案:

没有答案