2013-03-05 475 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