提问者:小点点

从存储在ArrayList中的数据动画蜡烛棒图表


我有一秒钟的烛台数据存储在“BarData”对象的数组列表中,其中包含打开、高、低和关闭数据以及时间戳。我将这些数据聚合成5分钟的条形图,并在定制的JavaFX XYChart上显示数据以生成蜡烛。

聚合代码运行良好,我可以显示从1秒条创建的5分钟条。

现在,我想用列表中的24300组1秒数据来制作5分钟图表的动画,这样我就可以像回放实时市场数据源一样回放数据。

我试着使用时间线,但我很挣扎。是否需要为序列数据的每次更新创建一个关键帧?

这是一个工作循环,它将子列表中的1秒钟数据聚合成一个5分钟的图表。有人能告诉我如何制作这个动画吗?

        for (BarData bar : sublist) 
        {
           String label = "";
           if ((bar.getDateTime().getMinute()%5 == 0) && bar.getDateTime().getSecond() == 0)
           {
              label = dtf.format(bar.getDateTime());
              series.getData().add(new XYChart.Data<>(label, bar.getOpen(), bar));
           }
           else
           {
              // Just updating values so no need to update label.
              int idxOfLastBarInList = series.getData().size()-1;
              XYChart.Data<String, Number> data = series.getData().get(idxOfLastBarInList);
              BarData prevBar = (BarData)(data.getExtraValue());
              prevBar.update(bar); // Modifies bar based on new bar data.
              data.setExtraValue(prevBar);
              series.getData().set(idxOfLastBarInList, data);
           }
        }

该图表最终如下所示:

样本图表


共1个答案

匿名用户

经过一些工作,我意识到:

series.getData().set(idxOfLastBarInList, data);

不能强制图表重绘柱状图。为了让栏立即更新,我不得不删除栏,然后重新添加栏。这似乎是一个奇怪的变通方法,但它确实有效。如果有人有更好的答案,我很乐意听到。

series.getData().remove(idxOfLastBarInList);
series.getData().add(new XYChart.Data<>(label, prevBar.getOpen(), prevBar));

用删除后的添加替换设置代码确保了我的蜡烛被重新绘制。