2013-03-05 477 views
2

我有一个表示颜色序列的颜色列表。我想将新的颜色序列应用到饼图数据。Javafx更改PieChart颜色

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

但所有图表数据采取从里海颜色只有一种颜色。

+0

我有包含颜色序列的颜色列表。我想将我的新颜色序列应用于饼图数据。 – 2013-03-05 09:05:33

回答

5

可以使用如方法实现代码定制馅饼颜色:

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

一般来说,对于大多数应用程序,建议使用样式表方法。

+0

感谢您的努力,您的代码工作良好,但是当我使用鼠标事件将工具提示添加到饼图时,并且随着鼠标移动到图表上,它会再次返回css颜色。 – 2013-03-06 08:26:06

+0

我发现鼠标事件中的问题风格设置为空'node.setStyle(“”)',当我评论它所有的事情都是正确的。 – 2013-03-06 09:52:53

+2

使用applyCustomColorSequence()函数时,切片的颜色会改变,但图例中的颜色不会更新,这意味着它们变得不一致。 – bjdodo 2013-10-06 19:22:24