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

时间:2018-03-01 19:25:35

标签: java animation javafx charts candlestick-chart

我有一个第二个烛台数据存储在' BarData'的ArrayList中。包含开放,高,低和关闭数据以及时间戳的对象。我将这些数据聚合到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

1 个答案:

答案 0 :(得分:0)

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

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

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

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

更换&#39;设置&#39;代码与&#39;删除&#39;然后添加&#39;确保我的蜡烛被重绘。