ADDITIONAL SYSTEM INFORMATION :
C:\Users\hwaite>ver
Microsoft Windows [Version 10.0.17763.973]
A DESCRIPTION OF THE PROBLEM :
Bar chart should display data in same order as it occurs within series. Add/remove events are reflected in chart but permutation events are removed.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1. Construct chart with series backed by SortedList
2. Update list's comparator so that order of items changes
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Chart content is reordered.
ACTUAL -
Chart content doesn't change.
---------- BEGIN SOURCE ----------
public class TestApplication extends Application {
public static void main(String[] pArgs) {launch(pArgs);}
@Override public void start(Stage pStage) {
final ObservableList<XYChart.Data<String,Number>> seriesData =
FXCollections.observableArrayList(
new XYChart.Data<>("alpha", 0),
new XYChart.Data<>("bravo", 1),
new XYChart.Data<>("charlie", 2),
new XYChart.Data<>("delta", 3)
);
final Comparator<XYChart.Data<String,Number>> ascendingComparator =
Comparator.comparing(XYChart.Data::getXValue);
final Comparator<XYChart.Data<String,Number>> descendingComparator =
ascendingComparator.reversed();
final SortedList<XYChart.Data<String,Number>> sortedSeriesData = new SortedList<>(
seriesData, descendingComparator
);
System.out.println("Sorted Data: " + sortedSeriesData);
final CheckBox checkBox = new CheckBox("Ascending");
checkBox.selectedProperty().addListener(
(pObs, pOldVal, pNewVal) -> {
sortedSeriesData.setComparator(
pNewVal ? ascendingComparator : descendingComparator
);
System.out.println(
String.format(
"Comparator: %s. List content: %s",
pNewVal ? "Ascending" : "Descending",
sortedSeriesData
)
);
}
);
final BarChart<String,Number> chart = new BarChart<>(
new CategoryAxis(),
new NumberAxis(),
FXCollections.singletonObservableList(
new XYChart.Series<>("test", sortedSeriesData)
)
);
VBox.setVgrow(chart, Priority.ALWAYS);
pStage.setScene(new Scene(new VBox(chart, checkBox), 400, 300));
pStage.show();
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Add and remove data instead of permuting.
FREQUENCY : always
C:\Users\hwaite>ver
Microsoft Windows [Version 10.0.17763.973]
A DESCRIPTION OF THE PROBLEM :
Bar chart should display data in same order as it occurs within series. Add/remove events are reflected in chart but permutation events are removed.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1. Construct chart with series backed by SortedList
2. Update list's comparator so that order of items changes
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Chart content is reordered.
ACTUAL -
Chart content doesn't change.
---------- BEGIN SOURCE ----------
public class TestApplication extends Application {
public static void main(String[] pArgs) {launch(pArgs);}
@Override public void start(Stage pStage) {
final ObservableList<XYChart.Data<String,Number>> seriesData =
FXCollections.observableArrayList(
new XYChart.Data<>("alpha", 0),
new XYChart.Data<>("bravo", 1),
new XYChart.Data<>("charlie", 2),
new XYChart.Data<>("delta", 3)
);
final Comparator<XYChart.Data<String,Number>> ascendingComparator =
Comparator.comparing(XYChart.Data::getXValue);
final Comparator<XYChart.Data<String,Number>> descendingComparator =
ascendingComparator.reversed();
final SortedList<XYChart.Data<String,Number>> sortedSeriesData = new SortedList<>(
seriesData, descendingComparator
);
System.out.println("Sorted Data: " + sortedSeriesData);
final CheckBox checkBox = new CheckBox("Ascending");
checkBox.selectedProperty().addListener(
(pObs, pOldVal, pNewVal) -> {
sortedSeriesData.setComparator(
pNewVal ? ascendingComparator : descendingComparator
);
System.out.println(
String.format(
"Comparator: %s. List content: %s",
pNewVal ? "Ascending" : "Descending",
sortedSeriesData
)
);
}
);
final BarChart<String,Number> chart = new BarChart<>(
new CategoryAxis(),
new NumberAxis(),
FXCollections.singletonObservableList(
new XYChart.Series<>("test", sortedSeriesData)
)
);
VBox.setVgrow(chart, Priority.ALWAYS);
pStage.setScene(new Scene(new VBox(chart, checkBox), 400, 300));
pStage.show();
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Add and remove data instead of permuting.
FREQUENCY : always