Mega Code Archive

 
Categories / Java / Swing JFC
 

Square Layout

/**  * The utillib library.  * More information is available at http://www.jinchess.com/.  * Copyright (C) 2002 Alexander Maryanovsky.  * All rights reserved.  *  * The utillib 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 of the  * License, or (at your option) any later version.  *  * The utillib 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 utillib library; if not, write to the Free Software  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA  */ import java.awt.*; /**  * A LayoutManager which lays out a single component making sure its height is  * always the same as its width. If the parent container's width differs from  * it height, the child will be laid out according to its x and y alignment.  */ public class SquareLayout implements LayoutManager{         /**    * Creates a new SquareLayout.    */   public SquareLayout(){   }            /**    * Creates a new Container with SquareLayout which will contain the specified    * component.    */       public static Container createSquareContainer(Component child){     Container container = new Container();     container.setLayout(new SquareLayout());     container.add(child);          return container;   }   /**    * Adds the specified component with the specified name to the layout.     */   public void addLayoutComponent(String name, Component component){        }         /**    * Removes the specified component from the layout.     */   public void removeLayoutComponent(Component component){        }            /**    * Returns the sole child of the specified container, or <code>null</code> if    * none. Throws an <code>IllegalStateException</code> if there is more than    * one child.    */       private Component getChild(Container c){     int childCount = c.getComponentCount();     if (childCount > 1)       throw new IllegalStateException("May not layout more than one component");     else if (childCount == 0)       return null;     else       return c.getComponent(childCount - 1);   }   /**    * Lays out the container in the specified panel.     */   public void layoutContainer(Container container){     Component child = getChild(container);     if (child == null)       return;          Dimension parentSize = container.getSize();     Insets insets = container.getInsets();          // A rectangle specifying the actual area available for layout.      Rectangle rect = new Rectangle(insets.left, insets.top,       parentSize.width - insets.left - insets.right, parentSize.height - insets.top - insets.bottom);     int minSize = rect.width < rect.height ? rect.width : rect.height;     int widthSpace = rect.width - minSize;     int heightSpace = rect.height - minSize;     child.setBounds(rect.x + (int)(widthSpace*child.getAlignmentX()),                     rect.y + (int)(heightSpace*child.getAlignmentY()), minSize, minSize);   }      /**    * Calculates the minimum size dimensions for the specified panel given the     * components in the specified parent container.     */   public Dimension minimumLayoutSize(Container container){     Component child = getChild(container);     if (child == null)       return new Dimension(0, 0);          Dimension childMinSize = child.getMinimumSize();     Insets insets = container.getInsets();          int width = childMinSize.width + insets.left + insets.right;     int height = childMinSize.height + insets.top + insets.bottom;     int maxSize = Math.max(width, height);     return new Dimension(maxSize, maxSize);   }   /**    * Calculates the preferred size dimensions for the specified panel given the    * components in the specified parent container.     */   public Dimension preferredLayoutSize(Container container){     Component child = getChild(container);     if (child == null)       return new Dimension(0, 0);          Dimension childPrefSize = child.getPreferredSize();     Insets insets = container.getInsets();          int width = childPrefSize.width + insets.left + insets.right;     int height = childPrefSize.height + insets.top + insets.bottom;     int maxSize = Math.max(width, height);     return new Dimension(maxSize, maxSize);   }    }