< prev index next >

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

Print this page
rev 8907 : RT-46086: StackedAreaChart doesn't fade out removed series


 372             Data<X,Y> item = series.getData().get(j);
 373             final Node symbol = createSymbol(series, seriesIndex, item, j);
 374             if (symbol != null) {
 375                 if (shouldAnimate()) symbol.setOpacity(0);
 376                 getPlotChildren().add(symbol);
 377                 if (shouldAnimate()) {
 378                     // fade in new symbol
 379                     keyFrames.add(new KeyFrame(Duration.ZERO, new KeyValue(symbol.opacityProperty(), 0)));
 380                     keyFrames.add(new KeyFrame(Duration.millis(200), new KeyValue(symbol.opacityProperty(), 1)));
 381                 }
 382             }
 383         }
 384         if (shouldAnimate()) animate(keyFrames.toArray(new KeyFrame[keyFrames.size()]));
 385     }
 386 
 387     @Override protected  void seriesRemoved(final Series<X,Y> series) {
 388         // remove series Y multiplier
 389         seriesYMultiplierMap.remove(series);
 390         // remove all symbol nodes
 391         if (shouldAnimate()) {
 392             // create list of all nodes we need to fade out
 393             final List<Node> nodes = new ArrayList<Node>();
 394             nodes.add(series.getNode());
 395             for (Data<X,Y> d: series.getData()) nodes.add(d.getNode());
 396             // fade out old and symbols
 397             if (getCreateSymbols()) {
 398                 KeyValue[] startValues = new KeyValue[nodes.size()];
 399                 KeyValue[] endValues = new KeyValue[nodes.size()];
 400                 for (int j=0; j < nodes.size(); j++) {
 401                     startValues[j]   = new KeyValue(nodes.get(j).opacityProperty(),1);
 402                     endValues[j]       = new KeyValue(nodes.get(j).opacityProperty(),0);
 403                 }
 404                 Timeline tl = new Timeline();
 405                 tl.getKeyFrames().addAll(
 406                     new KeyFrame(Duration.ZERO,startValues),
 407                     new KeyFrame(Duration.millis(400), actionEvent -> {
 408                         getPlotChildren().removeAll(nodes);
 409                         removeSeriesFromDisplay(series);
 410                     },endValues)
 411                 );
 412                 tl.play();
 413             } else {
 414                 Timeline tl = new Timeline();
 415                 tl.getKeyFrames().addAll(
 416                     new KeyFrame(Duration.millis(400), actionEvent -> {
 417                         getPlotChildren().removeAll(nodes);
 418                         removeSeriesFromDisplay(series);
 419                     })
 420                 );
 421                 tl.play();                
 422             }
 423         } else {
 424             getPlotChildren().remove(series.getNode());
 425             for (Data<X,Y> d:series.getData()) getPlotChildren().remove(d.getNode());
 426             removeSeriesFromDisplay(series);
 427         }
 428     }
 429     
 430     /** @inheritDoc */
 431     @Override protected void updateAxisRange() {
 432         // This override is necessary to update axis range based on cumulative Y value for the
 433         // Y axis instead of the normal way where max value in the data range is used.
 434         final Axis<X> xa = getXAxis();
 435         final Axis<Y> ya = getYAxis();
 436         if (xa.isAutoRanging()) {
 437             List xData = new ArrayList<Number>();
 438             for(Series<X,Y> series : getData()) {
 439                 for(Data<X,Y> data: series.getData()) {
 440                     xData.add(data.getXValue());
 441                 }
 442             }




 372             Data<X,Y> item = series.getData().get(j);
 373             final Node symbol = createSymbol(series, seriesIndex, item, j);
 374             if (symbol != null) {
 375                 if (shouldAnimate()) symbol.setOpacity(0);
 376                 getPlotChildren().add(symbol);
 377                 if (shouldAnimate()) {
 378                     // fade in new symbol
 379                     keyFrames.add(new KeyFrame(Duration.ZERO, new KeyValue(symbol.opacityProperty(), 0)));
 380                     keyFrames.add(new KeyFrame(Duration.millis(200), new KeyValue(symbol.opacityProperty(), 1)));
 381                 }
 382             }
 383         }
 384         if (shouldAnimate()) animate(keyFrames.toArray(new KeyFrame[keyFrames.size()]));
 385     }
 386 
 387     @Override protected  void seriesRemoved(final Series<X,Y> series) {
 388         // remove series Y multiplier
 389         seriesYMultiplierMap.remove(series);
 390         // remove all symbol nodes
 391         if (shouldAnimate()) {
 392             Timeline tl = new Timeline(createSeriesRemoveTimeLine(series, 400));



















 393             tl.play();










 394         } else {
 395             getPlotChildren().remove(series.getNode());
 396             for (Data<X,Y> d:series.getData()) getPlotChildren().remove(d.getNode());
 397             removeSeriesFromDisplay(series);
 398         }
 399     }
 400     
 401     /** @inheritDoc */
 402     @Override protected void updateAxisRange() {
 403         // This override is necessary to update axis range based on cumulative Y value for the
 404         // Y axis instead of the normal way where max value in the data range is used.
 405         final Axis<X> xa = getXAxis();
 406         final Axis<Y> ya = getYAxis();
 407         if (xa.isAutoRanging()) {
 408             List xData = new ArrayList<Number>();
 409             for(Series<X,Y> series : getData()) {
 410                 for(Data<X,Y> data: series.getData()) {
 411                     xData.add(data.getXValue());
 412                 }
 413             }


< prev index next >