我有一个第二个烛台数据存储在' 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);
}
}
图表最终看起来像这样:
答案 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;确保我的蜡烛被重绘。