Как установить определенный цвет для JavaFX XYChart.Серии?
Я пытаюсь создать свой JavaFX linechart, но не могу найти способ установить цвет для определенной серии. Я знаю, что могу стилизовать через CSS, но я не могу найти, как установить ID или класс в мою серию.
может кто-нибудь дать мне подсказку о:
- Как установить цвет для linecharts?
- Как установить класс css в series?
4 ответов
в целом предпочтительный способ построения диаграмм без кода, используя только таблицы стилей css, как рекомендует jschoen. Кроме того, если требуется дополнительная настройка, вы можете использовать CSS-запросы из кода, чтобы копаться в узлах, созданных из данных серии, и применять различные дополнительные стили css.
вот информация о динамическом изменении a JavaFX стиль линейной диаграммы и пример программы пойти с ответом. В примере приложения, все дополнительный стиль css выполняется с помощью вызова setStyle из кода. Используя аналогичный метод поиска, вы можете получить доступ к узлам серии, чтобы применить соответствующий stylesheet styleclass, а не вызов setStyle.
Как установить цвет для linecharts?
вот простой способ AreaChart или LineChart
XYChart chart = new AreaChart();
Series series = new Series();
chart.getData().add(series);
Node fill = series.getNode().lookup(".chart-series-area-fill"); // only for AreaChart
Node line = series.getNode().lookup(".chart-series-area-line");
Color color = Color.RED; // or any other color
String rgb = String.format("%d, %d, %d",
(int) (color.getRed() * 255),
(int) (color.getGreen() * 255),
(int) (color.getBlue() * 255));
fill.setStyle("-fx-fill: rgba(" + rgb + ", 0.15);");
line.setStyle("-fx-stroke: rgba(" + rgb + ", 1.0);");
Я нашел этот документ Oracle на таблицы стилей с CSS и на этой странице прокрутите вниз, чтобы Setting Chart Colors
для того, что вы конкретно ищете.
Как установить цвет для linecharts?
самый простой способ для этого следующий код в CSS:
.default-color0.chart-series-line { -fx-stroke: #e9967a; }
.default-color1.chart-series-line { -fx-stroke: #f0e68c; }
.default-color2.chart-series-line { -fx-stroke: #dda0dd; }
это, к сожалению, не будет работать по id или какой серии, а скорее порядок серии помещаются в график. Вы также можете установить стили линии делать:
.chart-series-line {
-fx-stroke-width: 2px;
-fx-effect: null;
}
Как установить класс css в series?
к сожалению я не вижу способа это сделать. Было бы неплохо иметь возможность создавать правила CSS на основе XYChart.Свойство имени серии, но я не думаю, что это возможно.
ответ jewelsea, похоже, гласит, что вы должны поместить класс стиля на каждый узел серии. Я использую следующий код для стиля серии диаграммы областей и назначаю класс только узлу, связанному с серией. Пример кода находится в Scala, но должен быть легко переведен.
при создании серии я добавляю класс стиля, специфичный для серии:
val s = new XYChart.Series[Number, Number]() //create a new series
s.setName(seriesName) //set its name (display in legend)
s.getNode.getStyleClass.add("series-" + seriesName) //add specific style class
затем внутри css
- file я делаю следующее, чтобы изменить цвет заливки серии "butterwings":
.series-butterwings *.chart-series-area-fill{
-fx-fill: #aab597;
}
это работает, потому что узел для области серии находится ниже узла серии (который является группой в случае диаграммы области).