我有一些包含各种系列的 StackedBarChart。
StackedBarChart.Series<String, Number> series1= new StackedBarChart.Series<String, Number>(
FXCollections.observableArrayList(list1));
StackedBarChart.Series<String, Number> series2= new StackedBarChart.Series<String, Number>(
FXCollections.observableArrayList(list2));
StackedBarChart.Series<String, Number> series3= new StackedBarChart.Series<String, Number>(
FXCollections.observableArrayList(list3));
ObservableList<StackedBarChart.Series<String, Number>> barChartData = FXCollections
.observableArrayList(series1, series2,
series3);
final StackedBarChart<String, Number> chart = new StackedBarChart<String, Number>(
xAxis, yAxis, barChartData);
我想更改系列的默认颜色。所以我添加了一个自定义 CSS 样式表
chart.getStylesheets().add("path to the CSS file");
在 CSS 文件中,我可以用 sth like 覆盖默认颜色
.default-color0 {
-fx-bar-fill: limegreen;
}
.default-color1 {
-fx-bar-fill: orange;
}
.default-color2 {
-fx-bar-fill: tomato;
}
这非常有效,但它只会用我的颜色替换默认颜色。如果我在将它们添加到图表时更改系列的顺序,它们将切换颜色。
我想在我的 CSS 中更精确,比如
.series1.color {
-fx-bar-fill: limegreen;
}
.series2.color {
-fx-bar-fill: orange;
}
.series2.color {
-fx-bar-fill: tomato;
}
并将这些自定义选择器直接添加到系列中,而不是使用 CSS 样式表提供图表。我知道您可以使用该setId(..)
方法在节点上设置自定义选择器,但我无法做到。
我也知道该lookup
方法,但我发现它一点也不优雅,因为您必须在图表渲染后调用它(因此您可以看到颜色在原始颜色和新颜色之间快速闪烁)
所以我的问题是:如何定义 CSS 选择器,例如
.series1.color {
-fx-bar-fill: limegreen;
}
.series2.color {
-fx-bar-fill: orange;
}
.series2.color {
-fx-bar-fill: tomato;
}
并以编程方式将它们应用于我想要的图表系列
series1.applySelector(".series1.color");
这样即使该系列在图表中以不同的顺序插入,它们仍然可以获得我想要的颜色