A layout manager that displays a single component in the center of its container. : Custom Layout « Swing « Java Tutorial






/*
 * JCommon : a free general purpose class library for the Java(tm) platform
 *
 *
 * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors.
 * 
 * Project Info:  http://www.jfree.org/jcommon/index.html
 *
 * This library is free software; you can redistribute it and/or modify it 
 * under the terms of the GNU Lesser General Public License as published by 
 * the Free Software Foundation; either version 2.1 of the License, or 
 * (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful, but 
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 
 * License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
 * USA.  
 *
 * [Java is a trademark or registered trademark of Sun Microsystems, Inc. 
 * in the United States and other countries.]
 * 
 * -----------------
 * CenterLayout.java
 * -----------------
 * (C) Copyright 2000-2005, by Object Refinery Limited.
 *
 * Original Author:  David Gilbert (for Object Refinery Limited);
 * Contributor(s):   -;
 *
 * $Id: CenterLayout.java,v 1.6 2005/11/16 15:58:40 taqua Exp $
 *
 * Changes (from 5-Nov-2001)
 * -------------------------
 * 05-Nov-2001 : Changed package to com.jrefinery.layout.* (DG);
 * 10-Oct-2002 : Fixed errors reported by Checkstyle (DG);
 *
 */

import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Insets;
import java.awt.LayoutManager;
import java.io.Serializable;

/**
 * A layout manager that displays a single component in the center of its
 * container.
 * 
 * @author David Gilbert
 */
public class CenterLayout implements LayoutManager, Serializable {

  /** For serialization. */
  private static final long serialVersionUID = 469319532333015042L;

  /**
   * Creates a new layout manager.
   */
  public CenterLayout() {
  }

  /**
   * Returns the preferred size.
   * 
   * @param parent
   *          the parent.
   * 
   * @return the preferred size.
   */
  public Dimension preferredLayoutSize(final Container parent) {

    synchronized (parent.getTreeLock()) {
      final Insets insets = parent.getInsets();
      if (parent.getComponentCount() > 0) {
        final Component component = parent.getComponent(0);
        final Dimension d = component.getPreferredSize();
        return new Dimension((int) d.getWidth() + insets.left + insets.right, (int) d.getHeight()
            + insets.top + insets.bottom);
      } else {
        return new Dimension(insets.left + insets.right, insets.top + insets.bottom);
      }
    }

  }

  /**
   * Returns the minimum size.
   * 
   * @param parent
   *          the parent.
   * 
   * @return the minimum size.
   */
  public Dimension minimumLayoutSize(final Container parent) {

    synchronized (parent.getTreeLock()) {
      final Insets insets = parent.getInsets();
      if (parent.getComponentCount() > 0) {
        final Component component = parent.getComponent(0);
        final Dimension d = component.getMinimumSize();
        return new Dimension(d.width + insets.left + insets.right, d.height + insets.top
            + insets.bottom);
      } else {
        return new Dimension(insets.left + insets.right, insets.top + insets.bottom);
      }
    }

  }

  /**
   * Lays out the components.
   * 
   * @param parent
   *          the parent.
   */
  public void layoutContainer(final Container parent) {

    synchronized (parent.getTreeLock()) {
      if (parent.getComponentCount() > 0) {
        final Insets insets = parent.getInsets();
        final Dimension parentSize = parent.getSize();
        final Component component = parent.getComponent(0);
        final Dimension componentSize = component.getPreferredSize();
        final int xx = insets.left
            + (Math.max((parentSize.width - insets.left - insets.right - componentSize.width) / 2,
                0));
        final int yy = insets.top
            + (Math.max(
                (parentSize.height - insets.top - insets.bottom - componentSize.height) / 2, 0));
        component.setBounds(xx, yy, componentSize.width, componentSize.height);
      }
    }

  }

  /**
   * Not used.
   * 
   * @param comp
   *          the component.
   */
  public void addLayoutComponent(final Component comp) {
    // not used.
  }

  /**
   * Not used.
   * 
   * @param comp
   *          the component.
   */
  public void removeLayoutComponent(final Component comp) {
    // not used
  }

  /**
   * Not used.
   * 
   * @param name
   *          the component name.
   * @param comp
   *          the component.
   */
  public void addLayoutComponent(final String name, final Component comp) {
    // not used
  }

  /**
   * Not used.
   * 
   * @param name
   *          the component name.
   * @param comp
   *          the component.
   */
  public void removeLayoutComponent(final String name, final Component comp) {
    // not used
  }

}








14.97.Custom Layout
14.97.1.Custom Layout: DiagonalLayoutCustom Layout: DiagonalLayout
14.97.2.GraphPaperLayout implements LayoutManager2
14.97.3.Circle Layout
14.97.4.This LayoutManager arranges the components into a column. Components are always given their preferred size
14.97.5.Compents are laid out in a circle.
14.97.6.Specialised layout manager for a grid of components.
14.97.7.Stack Layout, uses an orientation to determine if the contents should be arranged horizontally or vertically.
14.97.8.A layout manager that displays a single component in the center of its container.
14.97.9.A simple layoutmanager to overlay all components of a parent.
14.97.10.A layout manager that lays out components along a central axis
14.97.11.Wrapper Layout
14.97.12.Center Layout
14.97.13.DividerLayout is layout that divides two components with the column of actions
14.97.14.X Y Layout