Это работает великолепно, я люблю тебя, Седрик

аюсь динамически установить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..");
                }
                }
            });

            }
        }
        }
    });

К сожалению, этот обратный вызов, кажется, никогда не вызывается ..

Ответы на вопрос(1)

Ваш ответ на вопрос