Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8238081

BarChart ignores data permutation events

XMLWordPrintable

    • x86_64
    • windows_10

      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


            Unassigned Unassigned
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated: