我有一个代表颜色序列的颜色列表。我想将新的颜色序列应用于饼图数据。
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 颜色。
答案 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。
您可以使用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样式可能不起作用。这可能是一个错误,但为了使样式起作用,我不得不将我的值转换为正值。当值是负数时,所有饼都是白色的。