我有一个代表颜色序列的颜色列表.我想将新的颜色序列应用于饼图数据.
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)
但所有图表数据只从里海色中获取一种颜色.
您可以使用以下方法在代码中实现自定义饼图颜色:
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).
以下是一些使用它的示例代码.

您可以使用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).
通常,建议在大多数应用程序中使用样式表方法.