2012-08-10 93 views
2

我一直在使用JavaFX几个月,并有一个关于CSS和图表的问题。我有一个堆积的条形图,我有几个系列我使用 - 可以说他们是系列A,B,C,D和E.当我生成图表时,并不是所有系列都会出现在图表中,例如某些图表可能有A,B和C,其他人可能只有B和E,而另一些人可能拥有全部5.基本上,我基于我正在使用的数据集编程生成系列。JavaFX,堆叠条形图和CSS

因此,在这种情况下,我希望每个图表上的系列颜色都相同。当我生成这些时,如果我只有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>; } 

任何帮助,将不胜感激。

回答

4

图表后已经显示出在舞台上:

for (Node n: chart.lookupAll(".default-color0.chart-bar")) n.setStyle("-fx-bar-fill: azure;"); 
+0

谢谢你这么多jewelsea - 我甚至尝试了上述前这种方法没有运气(对不起,不写,现在,我想它)。但是,你的帖子的关键是你写下“*在舞台上显示出来的图表之后”的位置:“ - 就是这样。我之前的代码在它被呈现在舞台上之前正在寻找它。非常感谢你。 – user1589081 2012-08-10 12:11:01

+1

我还有另一个问题jewelsea - 有没有一种方法可以通过编程来确定图表在舞台上显示的时间?对于堆叠条形图,这种方法运行良好,但是我还有另一种情况,因为在饼图呈现/显示在舞台上之前它正在执行,所以饼图无法正常工作。 – user1589081 2012-08-11 05:47:30

+0

好问题 - 在StackOverflow或Oracle JavaFX论坛上提问。我不知道答案。在过去,我使用时间轴来延迟处理,直到可能显示节点(参见[示例](https://gist.github.com/2129306))。 – jewelsea 2012-08-11 07:40:14