< prev index next >

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

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

@@ -52,10 +52,11 @@
 import javafx.css.StyleableDoubleProperty;
 import javafx.css.CssMetaData;
 import javafx.css.PseudoClass;
 
 import javafx.css.converter.SizeConverter;
+import javafx.collections.ListChangeListener;
 
 import javafx.css.Styleable;
 import javafx.css.StyleableProperty;
 
 /**

@@ -265,10 +266,23 @@
              // instead of removing it; when going from negative to positive
              item.getNode().getStyleClass().remove(NEGATIVE_STYLE);
          }
     }
 
+    @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);
+            }
+        }
+    }
+
     @Override protected void seriesAdded(Series<X,Y> series, int seriesIndex) {
         // handle any data already in series
         // create entry in the map
         Map<String, Data<X,Y>> categoryMap = new HashMap<String, Data<X,Y>>();
         for (int j=0; j<series.getData().size(); j++) {

@@ -295,11 +309,10 @@
         }
         if (categoryMap.size() > 0) seriesCategoryMap.put(series, categoryMap);
     }
 
     @Override protected void seriesRemoved(final Series<X,Y> series) {
-        updateDefaultColorIndex(series);
         // remove all symbol nodes
         if (shouldAnimate()) {
             pt = new ParallelTransition();
             pt.setOnFinished(event -> {
                 removeSeriesFromDisplay(series);

@@ -539,30 +552,20 @@
             pt.stop();
             removeSeriesFromDisplay(series);
         }
     }
 
-    private void updateDefaultColorIndex(final Series<X,Y> series) {
-        int clearIndex = seriesColorMap.get(series);
-        for (Data<X,Y> d : series.getData()) {
-            final Node bar = d.getNode();
-            if (bar != null) {
-                bar.getStyleClass().remove(DEFAULT_COLOR+clearIndex);
-            }
-        }
-    }
-
     private Node createBar(Series<X,Y> series, int seriesIndex, final Data<X,Y> item, int itemIndex) {
         Node bar = item.getNode();
         if (bar == null) {
             bar = new StackPane();
             bar.setAccessibleRole(AccessibleRole.TEXT);
             bar.setAccessibleRoleDescription("Bar");
             bar.focusTraversableProperty().bind(Platform.accessibilityActiveProperty());
             item.setNode(bar);
         }
-        bar.getStyleClass().addAll("chart-bar", "series" + seriesIndex, "data" + itemIndex,series.defaultColorStyleClass);
+        bar.getStyleClass().setAll("chart-bar", "series" + seriesIndex, "data" + itemIndex,series.defaultColorStyleClass);
         return bar;
     }
 
     private Data<X,Y> getDataItem(Series<X,Y> series, int seriesIndex, int itemIndex, String category) {
         Map<String, Data<X,Y>> catmap = seriesCategoryMap.get(series);
< prev index next >