Ich habe ein Problem mit JavaFxs StackedBarChart: Ich kann nicht die Daten in der Reihenfolge der Kategorie sortiert bekommen. Das Problem ist speziell, dass ich Serien für die Produkte erstellen muss (so dass sie gruppiert sind), aber wenn ich das tue, ist das Diagramm Reihenfolge in der Reihenfolge und nicht in der Reihenfolge der Kategorien (in diesem Fall Daten).JavaFx StackedBarChart nicht nach Kategorien sortiert
Das ist der Code, den ich die StackedBarChart erstellen können:
ObservableList<XYChart.Series<String, Number>> data = FXCollections.observableArrayList();
final ArrayList<String> dates = new ArrayList<>();
HashMap<Integer, List<XYChart.Data<String, Number>>> map = new HashMap<>();
HashMap<Integer, String> productNames = new HashMap<>();
for(SoldProduct sp : products) {
if (!map.containsKey(sp.getId())) {
map.put(sp.getId(), new ArrayList<>());
productNames.put(sp.getId(), sp.getName());
}
if(!dates.contains(sp.getDate().toString())){
dates.add(sp.getDate().toString());
}
List<XYChart.Data<String, Number>> list = map.get(sp.getId());
list.add(new XYChart.Data<String, Number>(sp.getDate().toString(), sp.getAmount()));
map.put(sp.getId(), list);
}
((CategoryAxis)barChart.getXAxis()).getCategories().setAll(dates);
barChart.setCategoryGap((500.0/dates.size())/2);
for(Map.Entry<Integer, List<XYChart.Data<String, Number>>> entry : map.entrySet()){
final StackedBarChart.Series<String, Number> series = new StackedBarChart.Series<String, Number>();
series.setName(productNames.get(entry.getKey()));
series.getData().addAll(entry.getValue());
data.add(series);
}
barChart.setData(data);
Ich hoffe, dass jemand eine Lösung für dieses Problem kennt und mich mit einer Lösung bieten könnte! Danke vielmals!
EDIT: durch die folgende 'Hack' zu tun, bevor Sie das Einfügen von Daten erhalte ich die richtige Reihenfolge
final StackedBarChart.Series<String, Number> notUsed = new StackedBarChart.Series<String, Number>();
notUsed.setName("Workaround JAVAFX BarChart Ordering Problem");
for(String d : dates){
notUsed.getData().add(new XYChart.Data<String, Number>(d, 0));
}
data.add(notUsed);
PS. Ich benutze die neueste Version: 1.8.0_77-b03 (da ich über ein Bestellproblem in früheren Versionen gelesen habe)