Это работает великолепно, я люблю тебя, Седрик
аюсь динамически установитьBarChart
Series
цвет.
Я хочу всегда иметь один и тот же цвет для одного и того же названия серии. Это не всегда одинаковые имена серий на диаграмме, поэтому я не могу полагаться на позицию на диаграмме (цвета по умолчанию всегда одинаковы в одной и той же позиции в списке данных).
chart.getData().addListener(new ListChangeListener<Series<String, Number>>() {
@Override
public void onChanged(
final javafx.collections.ListChangeListener.Change<? extends Series<String, Number>> c) {
while (c.next()) {
for (final Series s : c.getAddedSubList()) {
if ("booking".equalsIgnoreCase(s.getName())) {
if (s.getNode() != null) {
s.getNode().getStyleClass().add(".source-background-booking");
}
} else if ("airbnb".equalsIgnoreCase(s.getName())) {
if (s.getNode() != null) {
s.getNode().getStyleClass().add(".source-background-airbnb");
}
}
}
}
}
});
Это не работает, как ожидалось.Series
«sNode
всегдаnull
, Это почему?
РЕДАКТИРОВАТЬ: Другой подход, который не работает:
chart.getData().addListener(new ListChangeListener<Series<String, Number>>() {
@Override
public void onChanged(
final javafx.collections.ListChangeListener.Change<? extends Series<String, Number>> c) {
while (c.next()) {
System.err.println("Series " + c.getAddedSubList() + " kommt rein..");
for (final Series<String, Number> s : c.getAddedSubList()) {
s.nodeProperty().addListener(new ChangeListener<Node>() {
@Override
public void changed(final ObservableValue<? extends Node> observable, final Node oldValue,
final Node newValue) {
System.err.println("Already good");
if ("booking".equalsIgnoreCase(s.getName())) {
newValue.getStyleClass().add(".source-background-booking");
System.err.println("Seems to work..");
} else if ("airbnb".equalsIgnoreCase(s.getName())) {
newValue.getStyleClass().add(".source-background-airbnb");
System.err.println("Seems to work..");
}
}
});
}
}
}
});
К сожалению, этот обратный вызов, кажется, никогда не вызывается ..