/**
   * Lays out the container in the specified panel.
   *
   * @param parent the component which needs to be laid out
   */
  public void layoutContainer(Container parent) {
    for (java.util.Enumeration e = constraints.keys(); e.hasMoreElements(); ) {
      Component comp = (Component) e.nextElement();
      AbsoluteConstraints ac = (AbsoluteConstraints) constraints.get(comp);
      Dimension size = comp.getPreferredSize();
      int width = ac.getWidth();
      if (width == -1) width = size.width;
      int height = ac.getHeight();
      if (height == -1) height = size.height;

      comp.setBounds(ac.x, ac.y, width, height);
    }
  }
  /**
   * Calculates the preferred dimension for the specified panel given the components in the
   * specified parent container.
   *
   * @param parent the component to be laid out
   * @see #minimumLayoutSize
   */
  public Dimension preferredLayoutSize(Container parent) {
    int maxWidth = 0;
    int maxHeight = 0;
    for (java.util.Enumeration e = constraints.keys(); e.hasMoreElements(); ) {
      Component comp = (Component) e.nextElement();
      AbsoluteConstraints ac = (AbsoluteConstraints) constraints.get(comp);
      Dimension size = comp.getPreferredSize();

      int width = ac.getWidth();
      if (width == -1) width = size.width;
      int height = ac.getHeight();
      if (height == -1) height = size.height;

      if (ac.x + width > maxWidth) maxWidth = ac.x + width;
      if (ac.y + height > maxHeight) maxHeight = ac.y + height;
    }
    return new Dimension(maxWidth, maxHeight);
  }