Javafx改变了PieChart的颜色

Kha*_*ela 3 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++;
    }
Run Code Online (Sandbox Code Playgroud)

但所有图表数据只从里海色中获取一种颜色.

jew*_*sea 9

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

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++;
  }
}
Run Code Online (Sandbox Code Playgroud)

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

以下是一些使用它的示例代码.

coloredpiechart


您可以使用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; }
Run Code Online (Sandbox Code Playgroud)

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

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

通常,建议在大多数应用程序中使用样式表方法.

  • 使用applyCustomColorSequence()函数时,切片的颜色会发生变化,但图例中的颜色不会更新,这意味着它们会变得不一致. (2认同)