< prev index next >

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

Print this page




  73         super(xAxis, yAxis);
  74         if (!(xAxis instanceof ValueAxis && yAxis instanceof ValueAxis)) {
  75             throw new IllegalArgumentException("Axis type incorrect, X and Y should both be NumberAxis");
  76         }
  77         setData(data);
  78     }
  79 
  80     // -------------- METHODS ------------------------------------------------------------------------------------------
  81 
  82     /**
  83      * Used to get a double value from a object that can be a Number object or null
  84      *
  85      * @param number Object possibly a instance of Number
  86      * @param nullDefault What value to return if the number object is null or not a Number
  87      * @return number converted to double or nullDefault
  88      */
  89     private static double getDoubleValue(Object number, double nullDefault) {
  90         return !(number instanceof Number) ? nullDefault : ((Number)number).doubleValue();
  91     }
  92 
  93     /** @inheritDoc */
  94     @Override protected void layoutPlotChildren() {
  95         // update bubble positions
  96       for (int seriesIndex=0; seriesIndex < getDataSize(); seriesIndex++) {
  97             Series<X,Y> series = getData().get(seriesIndex);
  98 //            for (Data<X,Y> item = series.begin; item != null; item = item.next) {
  99             Iterator<Data<X,Y>> iter = getDisplayedDataIterator(series);
 100             while(iter.hasNext()) {
 101                 Data<X,Y> item = iter.next();
 102                 double x = getXAxis().getDisplayPosition(item.getCurrentX());
 103                 double y = getYAxis().getDisplayPosition(item.getCurrentY());
 104                 if (Double.isNaN(x) || Double.isNaN(y)) {
 105                     continue;
 106                 }
 107                 Node bubble = item.getNode();
 108                 Ellipse ellipse;
 109                 if (bubble != null) {
 110                     if (bubble instanceof StackPane) {
 111                         StackPane region = (StackPane)item.getNode();
 112                         if (region.getShape() == null) {
 113                             ellipse = new Ellipse(getDoubleValue(item.getExtraValue(), 1), getDoubleValue(item.getExtraValue(), 1));


 150     }
 151 
 152     @Override protected  void dataItemRemoved(final Data<X,Y> item, final Series<X,Y> series) {
 153         final Node bubble = item.getNode();
 154         if (shouldAnimate()) {
 155             // fade out old bubble
 156             FadeTransition ft = new FadeTransition(Duration.millis(500),bubble);
 157             ft.setToValue(0);
 158             ft.setOnFinished(actionEvent -> {
 159                 getPlotChildren().remove(bubble);
 160                 removeDataItemFromDisplay(series, item);
 161                 bubble.setOpacity(1.0);
 162             });
 163             ft.play();
 164         } else {
 165             getPlotChildren().remove(bubble);
 166             removeDataItemFromDisplay(series, item);
 167         }
 168     }
 169 
 170     /** @inheritDoc */
 171     @Override protected void dataItemChanged(Data<X, Y> item) {
 172     }
 173 
 174     @Override protected  void seriesAdded(Series<X,Y> series, int seriesIndex) {
 175         // handle any data already in series
 176         for (int j=0; j<series.getData().size(); j++) {
 177             Data<X,Y> item = series.getData().get(j);
 178             Node bubble = createBubble(series, seriesIndex, item, j);
 179             if (shouldAnimate()) {
 180                 bubble.setOpacity(0);
 181                 getPlotChildren().add(bubble);
 182                 // fade in new bubble
 183                 FadeTransition ft = new FadeTransition(Duration.millis(500),bubble);
 184                 ft.setToValue(1);
 185                 ft.play();
 186             } else {
 187                 getPlotChildren().add(bubble);
 188             }
 189         }
 190     }




  73         super(xAxis, yAxis);
  74         if (!(xAxis instanceof ValueAxis && yAxis instanceof ValueAxis)) {
  75             throw new IllegalArgumentException("Axis type incorrect, X and Y should both be NumberAxis");
  76         }
  77         setData(data);
  78     }
  79 
  80     // -------------- METHODS ------------------------------------------------------------------------------------------
  81 
  82     /**
  83      * Used to get a double value from a object that can be a Number object or null
  84      *
  85      * @param number Object possibly a instance of Number
  86      * @param nullDefault What value to return if the number object is null or not a Number
  87      * @return number converted to double or nullDefault
  88      */
  89     private static double getDoubleValue(Object number, double nullDefault) {
  90         return !(number instanceof Number) ? nullDefault : ((Number)number).doubleValue();
  91     }
  92 
  93     /** {@inheritDoc} */
  94     @Override protected void layoutPlotChildren() {
  95         // update bubble positions
  96       for (int seriesIndex=0; seriesIndex < getDataSize(); seriesIndex++) {
  97             Series<X,Y> series = getData().get(seriesIndex);
  98 //            for (Data<X,Y> item = series.begin; item != null; item = item.next) {
  99             Iterator<Data<X,Y>> iter = getDisplayedDataIterator(series);
 100             while(iter.hasNext()) {
 101                 Data<X,Y> item = iter.next();
 102                 double x = getXAxis().getDisplayPosition(item.getCurrentX());
 103                 double y = getYAxis().getDisplayPosition(item.getCurrentY());
 104                 if (Double.isNaN(x) || Double.isNaN(y)) {
 105                     continue;
 106                 }
 107                 Node bubble = item.getNode();
 108                 Ellipse ellipse;
 109                 if (bubble != null) {
 110                     if (bubble instanceof StackPane) {
 111                         StackPane region = (StackPane)item.getNode();
 112                         if (region.getShape() == null) {
 113                             ellipse = new Ellipse(getDoubleValue(item.getExtraValue(), 1), getDoubleValue(item.getExtraValue(), 1));


 150     }
 151 
 152     @Override protected  void dataItemRemoved(final Data<X,Y> item, final Series<X,Y> series) {
 153         final Node bubble = item.getNode();
 154         if (shouldAnimate()) {
 155             // fade out old bubble
 156             FadeTransition ft = new FadeTransition(Duration.millis(500),bubble);
 157             ft.setToValue(0);
 158             ft.setOnFinished(actionEvent -> {
 159                 getPlotChildren().remove(bubble);
 160                 removeDataItemFromDisplay(series, item);
 161                 bubble.setOpacity(1.0);
 162             });
 163             ft.play();
 164         } else {
 165             getPlotChildren().remove(bubble);
 166             removeDataItemFromDisplay(series, item);
 167         }
 168     }
 169 
 170     /** {@inheritDoc} */
 171     @Override protected void dataItemChanged(Data<X, Y> item) {
 172     }
 173 
 174     @Override protected  void seriesAdded(Series<X,Y> series, int seriesIndex) {
 175         // handle any data already in series
 176         for (int j=0; j<series.getData().size(); j++) {
 177             Data<X,Y> item = series.getData().get(j);
 178             Node bubble = createBubble(series, seriesIndex, item, j);
 179             if (shouldAnimate()) {
 180                 bubble.setOpacity(0);
 181                 getPlotChildren().add(bubble);
 182                 // fade in new bubble
 183                 FadeTransition ft = new FadeTransition(Duration.millis(500),bubble);
 184                 ft.setToValue(1);
 185                 ft.play();
 186             } else {
 187                 getPlotChildren().add(bubble);
 188             }
 189         }
 190     }


< prev index next >