Javafx改变了PieChart的颜色

时间:2013-03-05 08:46:15

标签: javafx-2

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

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++;
    }

但所有图表数据都采用只有一种颜色来自Caspian 颜色。

2 个答案:

答案 0 :(得分:7)

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

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)。

以下是一些使用它的sample code

coloredpiechart


您可以使用css stylesheets完成相同的效果。

例如,当针对给定图表应用样式表时,包含以下样式定义的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; }

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

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

通常,建议大多数应用使用样式表方法。

答案 1 :(得分:0)

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