【问题标题】:JavaFX, Stacked Bar Charts and CSSJavaFX、堆积条形图和 CSS
【发布时间】:2012-08-10 01:43:51
【问题描述】:

我已经使用 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>; }

任何帮助将不胜感激。

【问题讨论】:

    标签: java css charts javafx-2


    【解决方案1】:

    图表在舞台上显示后:

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

    【讨论】:

    • 非常感谢jewelsea - 我之前什至尝试过上面的这种方法,但没有运气(很抱歉现在我想到了没有写)。但是,您帖子的关键是您在哪里写了“图表已显示在舞台上:” - 就是这样。我之前的代码在舞台上呈现之前正在寻找它。再次感谢您。
    • 我还有一个问题 Jewelsea - 有没有办法以编程方式确定图表何时显示在舞台上?对于堆叠条形图,这运行良好,但我还有另一种情况,即饼图无法正常工作,因为它在饼图呈现/显示在舞台上之前执行。
    • 好问题 - 在 StackOverflow 或 Oracle JavaFX 论坛上提问。我不知道答案。在过去,我使用时间轴来延迟处理,直到可能显示一个节点(请参阅a sample)。
    • 再次感谢您 - 我已经在 API 中搜索了我可以使用的任何事件,但没有找到。这是我在这里学到的。
    猜你喜欢
    • 2017-02-26
    • 2014-02-09
    • 2020-07-15
    • 2020-09-14
    • 1970-01-01
    • 2016-10-13
    • 2017-10-14
    • 2019-01-14
    相关资源
    最近更新 更多