www.pudn.com > chat.rar > AbsoluteLayout.java, change:2003-07-31,size:6238b


/* 
 *                 Sun Public License Notice 
 *  
 * The contents of this file are subject to the Sun Public License 
 * Version 1.0 (the "License"). You may not use this file except in 
 * compliance with the License. A copy of the License is available at 
 * http://www.sun.com/ 
 *  
 * The Original Code is NetBeans. The Initial Developer of the Original 
 * Code is Sun Microsystems, Inc. Portions Copyright 1997-2000 Sun 
 * Microsystems, Inc. All Rights Reserved. 
 */ 
 
package org.netbeans.lib.awtextra; 
 
import java.awt.*; 
 
/** AbsoluteLayout is a LayoutManager that works as a replacement for "null" layout to 
* allow placement of components in absolute positions. 
* 
* @see AbsoluteConstraints 
* @version 1.01, Aug 19, 1998 
*/ 
public class AbsoluteLayout implements LayoutManager2, java.io.Serializable { 
    /** generated Serialized Version UID */ 
    static final long serialVersionUID = -1919857869177070440L; 
 
    /** Adds the specified component with the specified name to 
    * the layout. 
    * @param name the component name 
    * @param comp the component to be added 
    */ 
    public void addLayoutComponent(String name, Component comp) { 
        throw new IllegalArgumentException(); 
    } 
 
    /** Removes the specified component from the layout. 
    * @param comp the component to be removed 
    */ 
    public void removeLayoutComponent(Component comp) { 
        constraints.remove(comp); 
    } 
 
    /** 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); 
    } 
 
    /** Calculates the minimum dimension for the specified 
    * panel given the components in the specified parent container. 
    * @param parent the component to be laid out 
    * @see #preferredLayoutSize 
    */ 
    public Dimension minimumLayoutSize(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.getMinimumSize(); 
 
            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); 
    } 
 
    /** 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); 
        } 
    } 
 
    /** Adds the specified component to the layout, using the specified 
    * constraint object. 
    * @param comp the component to be added 
    * @param constr  where/how the component is added to the layout. 
    */ 
    public void addLayoutComponent(Component comp, Object constr) { 
        if (!(constr instanceof AbsoluteConstraints)) 
            throw new IllegalArgumentException(); 
        constraints.put(comp, constr); 
    } 
 
    /** Returns the maximum size of this component. 
    * @see java.awt.Component#getMinimumSize() 
    * @see java.awt.Component#getPreferredSize() 
    * @see LayoutManager 
    */ 
    public Dimension maximumLayoutSize(Container target) { 
        return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE); 
    } 
 
    /** Returns the alignment along the x axis.  This specifies how 
    * the component would like to be aligned relative to other 
    * components.  The value should be a number between 0 and 1 
    * where 0 represents alignment along the origin, 1 is aligned 
    * the furthest away from the origin, 0.5 is centered, etc. 
    */ 
    public float getLayoutAlignmentX(Container target) { 
        return 0; 
    } 
 
    /** Returns the alignment along the y axis.  This specifies how 
    * the component would like to be aligned relative to other 
    * components.  The value should be a number between 0 and 1 
    * where 0 represents alignment along the origin, 1 is aligned 
    * the furthest away from the origin, 0.5 is centered, etc. 
    */ 
    public float getLayoutAlignmentY(Container target) { 
        return 0; 
    } 
 
    /** Invalidates the layout, indicating that if the layout manager 
    * has cached information it should be discarded. 
    */ 
    public void invalidateLayout(Container target) { 
    } 
 
 
    /** A mapping <Component, AbsoluteConstraints> */ 
    protected java.util.Hashtable constraints = new java.util.Hashtable(); 
}