У меня есть несколько 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 я могу переопределить цвет по умолчанию с помощью чего-то вроде
.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");
так что даже если серии будут вставлены с другим порядком в диаграмму, они все равно получат нужный мне цвет