java - 根据 ArrayList 中存储的数据制作 CandleStick 图表动画

标签 java animation javafx charts candlestick-chart

我将一秒烛台数据存储在“BarData”对象的 ArrayList 中,其中包含开盘价、最高价、最低价和收盘价数据以及时间戳。我将这些数据聚合成 5 分钟柱状图,并在定制的 JavaFX XYChart 上显示数据以生成蜡烛图。

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

现在,我想使用列表中的 24,300 组 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);
           }
        }

图表最终看起来像这样:

Sample Chart

最佳答案

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

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

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

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

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

关于java - 根据 ArrayList 中存储的数据制作 CandleStick 图表动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49057257/

相关文章:

Java Spring REST Get 工作得很好,但是在发布 json 时出现 404 错误

java - 为什么 wicket checkGroup 不会检查任何内容

java - 创建自定义控件以包含其他自定义控件

java - 如何仅在文件发生更改时才下载该文件?

javascript - A 型框架相机旋转和移动动画未考虑新数据

javascript - 确定任意元素是否使用 CSS3 动画

iphone - 为什么 iOS 动画第一次运行时速度很慢?

javafx - 如何使 ImageView 适合 GridPane 子节点

java - 如何在 javafx 中使用 Canvas 和文本

java - 使用中断方法