在下面的示例中,您可以看到,根据选中的复选框,对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);
}
}