JavaFX图表:切换系列数据的正确方法

时间:2015-04-24 06:39:09

标签: javafx-8

我们有一个java程序,它接受一个CSV文件并将其处理成多组数据。数据在XYChart上一次显示一个,使用ComboBox在它们之间进行选择。但是,我们一直遇到更新/更改数据的问题:

首先,我们为每个数据系列都有一堆ObservableList对象,例如

ObservableList<XYChart.Data<T,V>> data = FXCollections.observableArrayList();

并且每当改变ChoiceBox选择时,我们将清除该系列并添加对应于不同选择的系列,例如

theChart.getData().clear();
theChart.getData().add(new XYChart.Series<T,V>(data));

但是,当data更新时,如果将相同数据添加到多个图表中,我们会收到错误。我认为如果theChart.getData().add(new XYChart.Series<T,V>(data));之前已为同一data调用了两次,就会发生这种情况。

所以我把它包起来像

XYChart.Series<T,V> series = new XYChart.Series<>(data);

并更改了图表数据,如:

theChart.getData().clear();
theChart.getData().add(series);

在我的计算机上工作正常,但在data被清除然后add时我们会在series onChanged事件期间获得空指针异常,这表明某种竞争条件。

问题:

  • 更改JavaFX图表正在显示的系列的内容是什么?
  • 有没有办法'暂停'onChanged事件,以便在图表尝试重绘之前更新整个数据系列。

1 个答案:

答案 0 :(得分:1)

你不能做clear(),会抛出UnsupportedOperationException。更新图表的正确方法是设置一个新的空ObservableList,然后将新的XYChart.Series添加到正确的XYChart.Data个对象中。

chart.setData(FXCollections.observableArrayList());
XYChart.Series<T, V> series = new XYChart.Series<T, V>();
XYChart.Data<T, V> data = new XYChart.Data<T, V>(t_type_Value, v_type_Value);

series.getData().add(data);

chart.getData().add(series);