ЗадачаRecreate гистограмма без него помнящие данные
У меня есть 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);
}
}
При запуске программы и нажмите на кнопку «Вставить перед», вы получите это:
При перезапуске программы и нажмите на кнопку «Insert After», вы получите это:
При перезапуске программы и нажмите на кнопку «Вставить перед», а затем на «Insert After», вы получите это:
что неправильно. Оно должно быть таким:
Есть ли способ, чтобы очистить память BarChart в? Очевидно, setData недостаточно.
Я подозреваю, что это имеет какое-то отношение к специальным методам удаления на гистограмме и что данные не были полностью удалены при добавлении новых данных. В исходном коде класса BarChart в JavaFX существуют некоторые сомнительные методы, такие как «seriesBeingRemovedIsAdded».
Большое спасибо за помощь!
Действие «Вставить до» добавит бар перед последним баром, то есть статическим. «Вставить после» добавит строку после последней строки, т. Е. Снова «статический». Логика кажется мне верной. Я не понимаю, как нажать «Вставить до», а затем «Вставить после», должно получиться последнее изображение. Какова его логика? – ItachiUchiha
Кнопки плохо названы («Вставка» для меня подразумевает результат, который вы видите), но логика кода должна привести к последнему изображению; он создает новую (пустую) серию, затем добавляет «Static», затем «New 0», затем «New 1». –
@ItachiUchiha: «Вставить перед» следует добавить ВСЕ столбцы перед «статическим» баром. «Вставить после» следует добавить ВСЕ столбцы после «статической» панели. Всегда, не должно быть микса с некоторыми барами перед статикой, а некоторые после статики. – Roland