从ArrayList中存储的数据动画CandleStick图表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从ArrayList中存储的数据动画CandleStick图表相关的知识,希望对你有一定的参考价值。

我有一个第二个烛台数据存储在'BarData'对象的ArrayList中,它包含open,high,low和close数据以及时间戳。我将这些数据聚合到5分钟的条形图中,并在定制的JavaFX XYChart上显示数据以生成蜡烛。

聚合代码工作正常,我可以显示从1秒栏创建的5分钟栏。

现在,我想使用列表中的24,300组1秒数据为5分钟图表的创建设置动画,这样我就可以重放数据,就好像它是实时市场数据源一样。

我曾试图使用时间轴,但我正在努力。我是否需要为系列数据的每次更新创建一个KeyFrame?

以下是将“子列表”中的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);
           }
        }

图表最终看起来像这样:

Sample Chart

答案

经过一番工作,我意识到这一行:

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

无法强制图表重绘条形图。为了让栏立即更新,我不得不删除栏,然后重新添加栏。这似乎是一个奇怪的解决方法,但它确实有效。如果有人有更好的答案我会很高兴听到它。

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

用'remove'替换'set'代码后跟'add'确保我的蜡烛被重绘。

以上是关于从ArrayList中存储的数据动画CandleStick图表的主要内容,如果未能解决你的问题,请参考以下文章

例外:从意图存储ArrayList时“无法转换为java.util.ArrayList”

ArrayList

在 pd 数据框中查找与给定列表中的日期匹配的日期 [重复]

如何将 Url 从 Firebase Storage 存储到 ArrayList 中?

将值从 json 数据存储到 arraylist 并填充视图持有者

[ABC219H]Candles