4

我有一个代表颜色序列的颜色列表。我想将新的颜色序列应用于饼图数据。

private final int CASPIAN_COLOR_COUNTS = 8;   
public void setPieChartColor(PieChart chart, List<String> colors) {

    chart.getData().get(i);   // for debug to get the node name (.data)

    /**
     * Set Pie color
     */
    int i = 0;
    for (String color : colors) {
        final Node node = chart.lookup(".data" + i);
        node.getStyleClass().remove("default-color" + (i % CASPIAN_COLOR_COUNTS));
        node.getStyleClass().add(color);
        i++;
    }

但所有图表数据仅采用里海颜色中的一种颜色。

4

2 回答 2

11

您可以使用以下方法在代码中实现自定义饼图颜色:

private void applyCustomColorSequence(
    ObservableList<PieChart.Data> pieChartData, 
    String... pieColors) {
  int i = 0;
  for (PieChart.Data data : pieChartData) {
    data.getNode().setStyle(
      "-fx-pie-color: " + pieColors[i % pieColors.length] + ";"
    );
    i++;
  }
}

请注意,该方法必须在图表显示在活动场景后应用(否则data.getNode()调用将返回null)。

这是一些使用它的示例代码。

彩色饼图


您可以使用css 样式表实现相同的效果。

例如,当样式表应用于给定图表时,包含以下样式定义的 css 样式表将更改饼图的默认颜色。

.default-color0.chart-pie { -fx-pie-color: #ffd700; }
.default-color1.chart-pie { -fx-pie-color: #ffa500; }
.default-color2.chart-pie { -fx-pie-color: #860061; }
.default-color3.chart-pie { -fx-pie-color: #adff2f; }
.default-color4.chart-pie { -fx-pie-color: #ff5700; }

有关基于样式表的方法的示例:请参阅使用 CSS教程设置图表样式的“设置饼图的颜色”部分。

样式表方法的优点是样式与代码分离。它的缺点是必须在创建样式表时而不是在运行时设置颜色,并且颜色序列仅限于固定数量的颜色 (8)。

一般来说,大多数应用程序都推荐使用样式表方法。

于 2013-03-06T00:06:40.490 回答
0

如果您的值为负数,css 样式可能不起作用。这可能是一个错误,但我必须将我的值转换为正值才能使样式正常工作。当值为负时,所有馅饼都是白色的。

于 2019-09-04T09:26:51.247 回答