public void animatorFinished(AnimatorEvent arg0) {
      animations--;
      if (animations == 0) {
        for (Iterator iter = getNewSizes().keySet().iterator(); iter.hasNext(); ) {
          JRDesignElement element = (JRDesignElement) iter.next();
          Rectangle rectangle = getNewSizes().get(element);
          element.setX(rectangle.x);
          element.setY(rectangle.y);
          element.setWidth(rectangle.width);
          element.setHeight(rectangle.height);

          // Calculate the best font height...
          if (element instanceof JRDesignTextElement) {
            JRStyledTextParser styledTextParser = JRStyledTextParser.getInstance();
            JRDesignTextElement dte = (JRDesignTextElement) element;
            dte.setFontSize(null);
            for (int i = dte.getFontSize() - 1; i > 1; --i) {
              String text = "test";

              // Convert the element in a print element...
              Map<Attribute, Object> attributes =
                  JRFontUtil.getAttributes(new HashMap(), dte, Locale.getDefault());

              JRStyledText styledText =
                  styledTextParser.getStyledText(
                      attributes,
                      text,
                      JRCommonText.MARKUP_STYLED_TEXT.equals(
                          dte
                              .getMarkup()), // FIXMEMARKUP only static styled text appears on
                                             // preview. no other markup
                      Locale.getDefault());

              JasperReportsContext context = IRLocalJasperReportsContext.getInstance();

              JRTextMeasurerUtil measurerUtil = JRTextMeasurerUtil.getInstance(context);
              JRTextMeasurer measurer = measurerUtil.createTextMeasurer(dte);
              JRMeasuredText measuredText = measurer.measure(styledText, 0, dte.getHeight(), true);

              if (measuredText.getTextHeight() > dte.getHeight()) {
                if (i > 1) {
                  dte.setFontSize(i);
                } else {
                  break;
                }
              } else {
                break;
              }
            }
          }
        }
      }
    }
 public Map<JRElement, Rectangle> layout(JRElement[] elements, Dimension c) {
   Map<JRElement, Rectangle> map = new HashMap<JRElement, Rectangle>();
   int x = 0;
   int y = 0;
   int w = c.width;
   int h = (int) Math.floor((float) c.height / elements.length);
   int rest = c.height - h * elements.length;
   for (JRElement el : elements) {
     JRDesignElement del = (JRDesignElement) el;
     map.put(el, new Rectangle(el.getX(), el.getY(), el.getWidth(), el.getHeight()));
     del.setX(x);
     del.setY(y);
     del.setWidth(w);
     del.setHeight(h + rest);
     // if last grab free pixels
     y += h + rest;
     if (rest > 0) rest = 0;
     LayoutManager.layout(map, el);
   }
   return map;
 }