Java 第二次单击图表时出现重复序列错误。如何解决这个问题?
我试图在单击按钮时获取图形,但如果我第二次单击按钮,它将引发重复序列异常。有人能帮我吗 提前谢谢 尝试: 1.series.getData().clear()Java 第二次单击图表时出现重复序列错误。如何解决这个问题?,java,javafx,linechart,Java,Javafx,Linechart,我试图在单击按钮时获取图形,但如果我第二次单击按钮,它将引发重复序列异常。有人能帮我吗 提前谢谢 尝试: 1.series.getData().clear() NumberAxis-xaxis=新的NumberAxis(20082018,1); NumberAxis-yaxis=新的NumberAxis(10,80,5); xaxis.setLabel(“年度”); yaxis.setLabel(“价格”); XYChart.Series系列=新的XYChart.Series(); 线形图线形图
NumberAxis-xaxis=新的NumberAxis(20082018,1);
NumberAxis-yaxis=新的NumberAxis(10,80,5);
xaxis.setLabel(“年度”);
yaxis.setLabel(“价格”);
XYChart.Series系列=新的XYChart.Series();
线形图线形图=新线形图(xaxis,yaxis);
graph1.setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent事件){
线形图(X、Y、X轴、Y轴);
}
专用空心线图(ArrayList X、ArrayList Y、NumberAxis xaxis、NumberAxis yaxis){
series.getData().clear();
系列名称(“股票分析”);
对于(int i=0;i您得到的错误是由于第二次将相同的序列
实例添加到相同的图表
中引起的。您的方法不考虑序列是否已存在于图表中,因此第二次调用该方法自然会导致“重复序列”错误。调用Series.getData().clear()
无法解决问题,因为这会清除,而不是。不幸的是,他们将这两个属性命名为相同的东西(即XYChart#getData()
和Series#getData()
),因为这会让人感到困惑
假设您继续使用相同的系列
实例,则至少有两种可能的解决方案:
从折线图
中删除系列
,对其进行更新,然后重新添加
chart.getData().remove(系列);
//更新系列
chart.getData().add(series);//副作用:序列移到列表末尾
注意:如果图表已设置动画,则此选项可能不起作用。请参阅和
只要不要将系列
添加到折线图
中(如果已经存在)
如果(!chart.getData()包含(系列)){
chart.getData().add(系列);
}
另一种方法是创建并使用新的系列
实例(如果适用)
另外,调用child2.getChildren().add(折线图);
还应导致在第二次调用您的方法时引发异常。至少在您修复当前问题后会引发异常,因为当前异常停止执行该行。同一节点
不能多次添加到同一父节点
同一问题、不同(ish)上下文中
您的方法似乎尝试执行太多操作。从概念上讲,您似乎希望该方法更新图表。如果是这样,则无需“重新添加”将系列
添加到图表或将折线图
添加到父级。在初始化所有内容时设置用户界面,然后让该方法根据需要更新数据。这样做意味着您不必使用上述任何一种解决方案;总体而言,这也是一种更好的方法
还请注意,您正在使用。折线图
、系列
和数据
类都是泛型的,但您没有指定任何类型参数。由于两个轴都是数字轴
,因此您应该使用:
折线图=新折线图(xAxis,yAxis);
Series系列=新系列();
series.add(新数据(x.get(i),y.get(i));
(注意菱形操作符:
)
最后,试着跟随,尤其是在发布到公共论坛时
NumberAxis xaxis = new NumberAxis(2008,2018,1);
NumberAxis yaxis = new NumberAxis(10,80,5);
xaxis.setLabel("Year");
yaxis.setLabel("Price");
XYChart.Series series = new XYChart.Series();
LineChart linechart = new LineChart(xaxis,yaxis);
graph1.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
Linechart(X,Y,xaxis,yaxis);
}
private void Linechart(ArrayList <Integer> X, ArrayList<Integer> Y, NumberAxis xaxis, NumberAxis yaxis) {
series.getData().clear();
series.setName("Stock Analysis");
for(int i=0;i<=X.size()-1;i++){
series.getData().add(new XYChart.Data(X.get(i), Y.get(i)));
}
linechart.getData().add(series);
child2.getChildren().remove(area);
child2.getChildren().add(linechart);
}