JavaFX、堆积条形图和CSS

3
我已经使用JavaFX几个月了,关于CSS和图表有一个问题。我有一个堆叠条形图,我使用了几个系列 - 假设它们是A、B、C、D和E系列。当我生成图表时,并不是所有的系列都会显示在图表中,例如有些图表可能只有A、B和C,而其他图表可能只有B和E,还有一些图表可能包含全部5个系列。基本上,我根据正在处理的数据集以编程方式生成系列。

因此,在这种情况下,我希望每个图表上的系列颜色相同。当我生成这些内容时,如果我只有B和E,则反映这些颜色的css类名为:

.default-color0.chart-bar和.default-color1.chart-bar - 这里仅设置系列顺序的颜色 - 因此系列1将获得 "..color0.chart.." 定义,系列2 "..color1.chart.."等等。当我不知道哪个系列会排在第一位时,我需要在代码中动态设置这些。

我找到的唯一解决方案是将堆叠条形图的样式表设置为我预先编译的CSS文件。这很有效,以下是我在代码中如何实现的示例。

myStackedBarChart.getStylesheets().add("/myapp/chartSeriesColors.css");

唯一的问题是因为位置1中的系列未知,我必须创建每个可能系列的排列组合的CSS文件,我知道这是一个不好的解决方案。

我已经到处寻找在运行时动态设置系列CSS的方法,但没有找到 - 是否有办法做到这一点。基本上想将以下CSS类定义设置为:

.default-color0.chart-bar { -fx-bar-fill: #<a color I would set at runtime>; }
.default-color1.chart-bar { -fx-bar-fill: #<a color I would set at runtime>; }

任何帮助都将不胜感激。

1个回答

4
在舞台上展示图表后:
for (Node n: chart.lookupAll(".default-color0.chart-bar")) n.setStyle("-fx-bar-fill: azure;");

非常感谢jewelsea - 我之前甚至尝试过这种方法,但没有成功(现在想想很抱歉没有写下来)。但是你帖子中的关键是你写的“图表显示在舞台上之后:”-就是这样。我的代码之前是在它被呈现在舞台上之前寻找它。再次非常感谢你。 - user1589081
1
我有另一个问题,jewelsea - 有没有办法通过编程确定图表何时显示在舞台上?对于堆积条形图,这很好用,但是对于饼图,由于它在渲染/显示在舞台上之前执行,所以无法正常工作。 - user1589081
好问题 - 在StackOverflow或Oracle JavaFX论坛上提问吧。我不知道答案。过去,我使用时间轴(Timeline)来延迟处理,直到节点可能被显示(参见a sample)。 - jewelsea
谢谢你再次回复。我已经搜索了API,但没有找到可以使用的事件。以下是我在这里学到的内容。 - user1589081

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接