2012-08-10 148 views
2

我一直在使用JavaFX幾個月,並有一個關於CSS和圖表的問題。我有一個堆積的條形圖,我有幾個系列我使用 - 可以說他們是系列A,B,C,D和E.當我生成圖表時,並不是所有系列都會出現在圖表中,例如某些圖表可能有A,B和C,其他人可能只有B和E,而另一些人可能擁有全部5.基本上,我基於我正在使用的數據集編程生成系列。JavaFX,堆疊條形圖和CSS

因此,在這種情況下,我希望每個圖表上的系列顏色都相同。當我生成這些時,如果我只有B和E,反映這些顏色的css類名稱是:

.default-color0.chart-bar和.default-color1.chart-bar - 設置系列順序的顏色 - 因此係列1將獲得「..color0.chart ..」定義,系列2「..color1.chart ..」等。當我在處理數據之前不知道哪一個將首先我將需要在代碼中動態設置這些。

我發現的唯一解決方案是將堆疊條形圖的樣式表設置爲我創建的預編譯的CSS文件。這工作得很好,下面是我如何在代碼中執行此操作的示例。

myStackedBarChart.getStylesheets().add("/myapp/chartSeriesColors.css"); 

唯一的問題是因爲在位置1系列是不知道,我會創造的一系列可能的每個排列的CSS文件,我知道這是一個壞的解決方案。

我已經在運行時動態地設置系列CSS的方式到處尋找,但還沒有找到 - 有辦法做到這一點。基本上想要設置如下CSS類的定義:

.default-color0.chart-bar { -fx-bar-fill: #<a color I would set at runtime>; } 
.default-color1.chart-bar { -fx-bar-fill: #<a color I would set at runtime>; } 

任何幫助,將不勝感激。

回答

4

圖表後已經顯示出在舞臺上:

for (Node n: chart.lookupAll(".default-color0.chart-bar")) n.setStyle("-fx-bar-fill: azure;"); 
+0

謝謝你這麼多jewelsea - 我甚至嘗試了上述前這種方法沒有運氣(對不起,不寫,現在,我想它)。但是,你的帖子的關鍵是你寫下「*在舞臺上顯示出來的圖表之後」的位置:「 - 就是這樣。我之前的代碼在它被呈現在舞臺上之前正在尋找它。非常感謝你。 – user1589081 2012-08-10 12:11:01

+1

我還有另一個問題jewelsea - 有沒有一種方法可以通過編程來確定圖表在舞臺上顯示的時間?對於堆疊條形圖,這種方法運行良好,但是我還有另一種情況,因爲在餅圖呈現/顯示在舞臺上之前它正在執行,所以餅圖無法正常工作。 – user1589081 2012-08-11 05:47:30

+0

好問題 - 在StackOverflow或Oracle JavaFX論壇上提問。我不知道答案。在過去,我使用時間軸來延遲處理,直到可能顯示節點(參見[示例](https://gist.github.com/2129306))。 – jewelsea 2012-08-11 07:40:14