从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);
}
}
图表最终看起来像这样:
答案
经过一番工作,我意识到这一行:
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”
在 pd 数据框中查找与给定列表中的日期匹配的日期 [重复]
如何将 Url 从 Firebase Storage 存储到 ArrayList 中?