void (Container container) { int gap = myGap.get(); synchronized (container.getTreeLock()) { Dimension top = getPreferredSize(myTop); Dimension bottom = getPreferredSize(myBottom); Dimension center = getPreferredSize(myCenter); Insets insets = container.getInsets(); int width = container.getWidth() - insets.left - insets.right; int height = container.getHeight() - insets.top - insets.bottom; int topY = 0; if (top != null) { topY = gap + layout(myTop, 0, width, insets); } int bottomY = height; if (bottom != null) { bottomY -= bottom.height; } if (bottomY < topY) { bottomY = topY; } if (center != null) { int centerY = (height - center.height) / 2; if (centerY > topY) { int centerBottomY = centerY + center.height + gap + gap; if (centerBottomY > bottomY) { centerY = bottomY - center.height - gap - gap; } } if (centerY < topY) { centerY = topY; } centerY = gap + layout(myCenter, centerY, width, insets); if (bottomY < centerY) { bottomY = centerY; } } if (bottom != null) { layout(myBottom, bottomY, width, insets); } } }