< prev index next >

modules/controls/src/main/java/javafx/scene/chart/StackedBarChart.java

Print this page
rev 9945 : 8089755: AreaChart area color change when series is removed

@@ -68,12 +68,10 @@
                          new HashMap<Series, Map<String, List<Data<X, Y>>>>();
     private Legend legend = new Legend();
     private final Orientation orientation;
     private CategoryAxis categoryAxis;
     private ValueAxis valueAxis;
-    private int seriesDefaultColorIndex = 0;
-    private Map<Series<X, Y>, String> seriesDefaultColorMap = new HashMap<Series<X, Y>, String>();
     // RT-23125 handling data removal when a category is removed.
     private ListChangeListener<String> categoriesListener = new ListChangeListener<String>() {
         @Override public void onChanged(ListChangeListener.Change<? extends String> c) {
             while (c.next()) {
                 for(String cat : c.getRemoved()) {

@@ -286,15 +284,25 @@
                         new KeyFrame(Duration.millis(700), new KeyValue(currentDisplayedXValueProperty(item), item.getXValue(), Interpolator.EASE_BOTH)))
                     );
         }
     }
 
+    @Override protected void seriesChanged(ListChangeListener.Change<? extends Series> c) {
+        // Update style classes for all series lines and symbols
+        // Note: is there a more efficient way of doing this?
+        for (int i = 0; i < getDataSize(); i++) {
+            final Series<X,Y> series = getData().get(i);
+            for (int j=0; j<series.getData().size(); j++) {
+                Data<X,Y> item = series.getData().get(j);
+                Node bar = item.getNode();
+                bar.getStyleClass().setAll("chart-bar", "series" + i, "data" + j, series.defaultColorStyleClass);
+            }
+        }
+    }
+
     /** @inheritDoc */
     @Override protected void seriesAdded(Series<X, Y> series, int seriesIndex) {
-        String defaultColorStyleClass = "default-color" + (seriesDefaultColorIndex % 8);
-        seriesDefaultColorMap.put(series, defaultColorStyleClass);
-        seriesDefaultColorIndex++;
         // handle any data already in series
         // create entry in the map
         Map<String, List<Data<X, Y>>> categoryMap = new HashMap<String, List<Data<X, Y>>>();
         for (int j = 0; j < series.getData().size(); j++) {
             Data<X, Y> item = series.getData().get(j);

@@ -348,13 +356,10 @@
         }
         return t;
     }
 
     @Override protected void seriesRemoved(final Series<X, Y> series) {
-        // Added for RT-40104
-        seriesDefaultColorIndex--;
-
         // remove all symbol nodes
         if (shouldAnimate()) {
             ParallelTransition pt = new ParallelTransition();
             pt.setOnFinished(event -> {
                 removeSeriesFromDisplay(series);

@@ -511,13 +516,12 @@
         legend.getItems().clear();
         if (getData() != null) {
             for (int seriesIndex = 0; seriesIndex < getData().size(); seriesIndex++) {
                 Series<X,Y> series = getData().get(seriesIndex);
                 Legend.LegendItem legenditem = new Legend.LegendItem(series.getName());
-                String defaultColorStyleClass = seriesDefaultColorMap.get(series);
                 legenditem.getSymbol().getStyleClass().addAll("chart-bar", "series" + seriesIndex, "bar-legend-symbol",
-                        defaultColorStyleClass);
+                        series.defaultColorStyleClass);
                 legend.getItems().add(legenditem);
             }
         }
         if (legend.getItems().size() > 0) {
             if (getLegend() == null) {

@@ -535,12 +539,11 @@
             bar.setAccessibleRole(AccessibleRole.TEXT);
             bar.setAccessibleRoleDescription("Bar");
             bar.focusTraversableProperty().bind(Platform.accessibilityActiveProperty());
             item.setNode(bar);
         }
-        String defaultColorStyleClass = seriesDefaultColorMap.get(series);
-        bar.getStyleClass().setAll("chart-bar", "series" + seriesIndex, "data" + itemIndex, defaultColorStyleClass);
+        bar.getStyleClass().setAll("chart-bar", "series" + seriesIndex, "data" + itemIndex, series.defaultColorStyleClass);
         return bar;
     }
 
     private List<Data<X, Y>> getDataItem(Series<X, Y> series, String category) {
         Map<String, List<Data<X, Y>>> catmap = seriesCategoryMap.get(series);
< prev index next >