如何为JavaFX XYChart.Series设置特定颜色?

Yur*_*ish 9 javafx-2

我正在尝试设置我的JavaFX线图,但找不到任何方法将颜色设置为特定系列.我知道,我可以通过CSS设置样式,但我找不到如何将ID或CLASS设置为我的系列.

任何人都可以给我一个线索:

  1. 如何将颜色设置为折线图?
  2. 如何将css类设置为系列?

jew*_*sea 14

一般来说,样式图表的首选方式是没有代码,只使用jschoen推荐的css样式表.此外,如果需要进一步自定义,您可以使用代码中的css查找来深入挖掘从系列数据生成的节点,并应用各种其他CSS样式.

以下是有关动态更改JavaFX折线图样式示例程序以获得答案的信息.在示例应用程序中,所有额外的css样式都是通过代码中的setStyle调用完成的.使用类似的查找技术,您可以访问系列节点以应用适当的样式表样式而不是setStyle调用.

  • 我可以相信基于CSS的图表样式适用于"仪表板"软件,但对于任何试图以交互方式处理数据的人来说,这是令人厌恶的.即使是javascript图表库通常也不会强制您更新样式表以更改单个散点图上的磅值. (2认同)

Jac*_*oen 6

我找到了一个关于使用 CSS 设计图表样式的 Oracle 文档,并在该页面上向下滚动到Setting Chart Colors您专门寻找的内容。

如何给折线图设置颜色?

最简单的方法是使用以下 CSS 片段:

.default-color0.chart-series-line { -fx-stroke: #e9967a; }
.default-color1.chart-series-line { -fx-stroke: #f0e68c; }
.default-color2.chart-series-line { -fx-stroke: #dda0dd; }
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不适用于 id 或哪个系列,而是系列在图表中的放置顺序。您还可以通过执行以下操作来设置线条样式:

.chart-series-line {    
    -fx-stroke-width: 2px;
    -fx-effect: null;
}
Run Code Online (Sandbox Code Playgroud)

如何将CSS类设置为系列?

不幸的是我看不到有办法做到这一点。如果能够根据 XYChart.Series 名称属性创建 CSS 规则,那就太好了,但我认为这是不可能的。


Naz*_*kyi 6

如何将颜色设置为折线图?

这是AreaChartLineChart的简单方法

XYChart chart = new AreaChart();
Series series = new Series();
chart.getData().add(series);

Node fill = series.getNode().lookup(".chart-series-area-fill"); // only for AreaChart
Node line = series.getNode().lookup(".chart-series-area-line");

Color color = Color.RED; // or any other color

String rgb = String.format("%d, %d, %d",
        (int) (color.getRed() * 255),
        (int) (color.getGreen() * 255),
        (int) (color.getBlue() * 255));

fill.setStyle("-fx-fill: rgba(" + rgb + ", 0.15);");
line.setStyle("-fx-stroke: rgba(" + rgb + ", 1.0);");
Run Code Online (Sandbox Code Playgroud)

  • 我想强调一下,在将系列添加到图表后,必须调用`series.getNode().lookup()`**,否则返回null. (3认同)
  • 我在这些行上返回了null:series.getNode()。lookup(“。chart-series-area-fill”); series.getNode()。lookup(“。chart-series-area-line”); 我正在使用面积图。 (2认同)
  • 对于LineChart,请尝试`series.getNode()。lookup(“。chart-series-line”);`。 (2认同)