Воссоздать гистограмму без запоминания данных

задача

У меня есть BarChart, который я должен заполнять различными данными снова и снова. Данные должны быть в предопределенном порядке. Конечно, я только хочу изменить данные, а не создавать гистограмму каждый раз.

проблема

Если у вас есть категория с заданным именем, которая уже существовала в более ранних данных, порядок будет неправильным.

Я создал пример. При нажатии на кнопку «Вставить перед» добавляется указанное количество баров. После этого добавляется «статическая» панель.

Кнопка «Вставить после» добавляет сначала «статическую» полосу, а затем и другие.

public class BarChartSample extends Application {

    int count = 1;

    @Override
    public void start(Stage stage) {

        final CategoryAxis xAxis = new CategoryAxis();
        final NumberAxis yAxis = new NumberAxis();
        final BarChart<String, Number> bc = new BarChart<String, Number>(xAxis, yAxis);
        bc.setAnimated(false);

        // create new chart data where the data are inserted before the "static" bar
        Button insertBeforeButton = new Button("Insert Before");
        insertBeforeButton.setOnAction(e -> {

            XYChart.Series series1 = new XYChart.Series();

            for (int i = 0; i < count; i++) {
                series1.getData().add(new XYChart.Data("New " + i, 50));
            }

            series1.getData().add(new XYChart.Data("Static", 100));

            bc.getData().setAll(series1);

            count++;

        });

        // create new chart data where the data are inserted after the "static" bar
        Button insertAfterButton = new Button("Insert After");
        insertAfterButton.setOnAction(e -> {

            XYChart.Series series1 = new XYChart.Series();

            series1.getData().add(new XYChart.Data("Static", 100));

            for (int i = 0; i < count; i++) {
                series1.getData().add(new XYChart.Data("New " + i, 50));
            }

            bc.getData().setAll(series1);

            count++;

        });

        // borderpane for chart and toolbar
        BorderPane bp = new BorderPane();
        bp.setCenter(bc);

        // toolbar
        HBox hb = new HBox();
        hb.getChildren().addAll(insertBeforeButton, insertAfterButton);
        bp.setTop(hb);

        Scene scene = new Scene(bp, 400, 200);

        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

Когда вы запускаете программу и нажимаете «Вставить перед», вы получаете это:

Когда вы перезапустите программу и нажмете «Вставить после», вы получите следующее:

Когда вы перезапустите программу и нажмете «Вставить до», а затем «Вставить после», вы получите следующее:

что неправильно. Должно быть так:

Есть ли способ очистить память Barchart? Очевидно, setData недостаточно.

Я подозреваю, что это как-то связано со специальными методами удаления в гистограмме и что данные не были полностью удалены при добавлении новых данных. В исходном коде класса BarChart в JavaFX есть несколько сомнительных методов, таких как "seriesBeingRemovedIsAdded".

Огромное спасибо за помощь!

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

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