@Override
 protected double computePrefHeight(double width) {
   final double top = snappedTopInset();
   final double bottom = snappedBottomInset();
   final double ah = snapSize(arrow.prefHeight(-1));
   return top + ah + bottom;
 }
 @Override
 protected void layoutChildren() {
   final double top = snappedTopInset();
   final double left = snappedLeftInset();
   final double bottom = snappedBottomInset();
   final double right = snappedRightInset();
   final double aw = snapSize(arrow.prefWidth(-1));
   final double ah = snapSize(arrow.prefHeight(-1));
   final double yPos = snapPosition((getHeight() - (top + bottom + ah)) / 2.0);
   final double xPos = snapPosition((getWidth() - (left + right + aw)) / 2.0);
   arrow.resizeRelocate(xPos + left, yPos + top, aw, ah);
 }
 @Override
 protected double computePrefHeight(double width) {
   double h = 0;
   for (Node child : getChildren()) {
     if (child instanceof Region) {
       Region region = (Region) child;
       if (region.getShape() != null) {
         h = Math.max(h, region.getShape().getLayoutBounds().getMaxY());
       } else {
         h = Math.max(h, region.prefHeight(width));
       }
     }
   }
   return h;
 }