Mega Code Archive

 
Categories / Java / Swing JFC
 

A vertical flow layout is similar to a flow layuot but it layouts the components vertically instead of horizontally

//---------------------------------------------------- // Image Mover // (C) Vassili Dzuba, 2000 // distributed under the Artistic License //---------------------------------------------------- //package modrcon; import java.awt.LayoutManager; import java.awt.Component; import java.awt.Dimension; import java.awt.Container; import java.awt.Insets; /**  *  A vertical flow layout is similar to a flow layuot but it layouts the  *  components vertically instead of horizontally.  *  * @author     Vassili Dzuba  * @since      March 24, 2001  */ public class VerticalFlowLayout implements LayoutManager, java.io.Serializable {   int _halign;   int _valign;   int _hgap;   int _vgap;   /**    *  Description of the Field    */   public final static int TOP = 0;   /**    *  Description of the Field    */   public final static int CENTER = 1;   /**    *  Description of the Field    */   public final static int BOTTOM = 2;   /**    *  Description of the Field    */   public final static int LEFT = 3;   /**    *  Description of the Field    */   public final static int RIGHT = 4;   /**    *  Constructor for the VerticalFlowLayout object    */   public VerticalFlowLayout() {      this(CENTER, CENTER, 5, 5);   }   /**    *  Constructor for the VerticalFlowLayout object    *    *@param  halign  Description of Parameter    *@param  valign  Description of Parameter    */   public VerticalFlowLayout(int halign, int valign) {     this(halign, valign, 5, 5);   }   /**    *  Constructor for the VerticalFlowLayout object    *    *@param  halign  Description of Parameter    *@param  valign  Description of Parameter    *@param  hgap    Description of Parameter    *@param  vgap    Description of Parameter    */   public VerticalFlowLayout(int halign, int valign, int hgap, int vgap) {     _hgap = hgap;     _vgap = vgap;     setAlignment(halign, valign);   }   /**    *  Sets the Alignment attribute of the VerticalFlowLayout object    *    *@param  halign  The new Alignment value    *@param  valign  The new Alignment value    */   public void setAlignment(int halign, int valign) {     _halign = halign;     _valign = valign;   }   /**    *  Sets the Hgap attribute of the VerticalFlowLayout object    *    *@param  hgap  The new Hgap value    */   public void setHgap(int hgap) {     _hgap = hgap;   }   /**    *  Sets the Vgap attribute of the VerticalFlowLayout object    *    *@param  vgap  The new Vgap value    */   public void setVgap(int vgap) {     _vgap = vgap;   }   /**    *  Gets the Halignment attribute of the VerticalFlowLayout object    *    *@return    The Halignment value    */   public int getHalignment() {     return _halign;   }   /**    *  Gets the Valignment attribute of the VerticalFlowLayout object    *    *@return    The Valignment value    */   public int getValignment() {     return _valign;   }   /**    *  Gets the Hgap attribute of the VerticalFlowLayout object    *    *@return    The Hgap value    */   public int getHgap() {     return _hgap;   }   /**    *  Gets the Vgap attribute of the VerticalFlowLayout object    *    *@return    The Vgap value    */   public int getVgap() {     return _vgap;   }   /**    *  Adds a feature to the LayoutComponent attribute of the VerticalFlowLayout    *  object    *    *@param  name  The feature to be added to the LayoutComponent attribute    *@param  comp  The feature to be added to the LayoutComponent attribute    */   public void addLayoutComponent(String name, Component comp) {   }   /**    *  Description of the Method    *    *@param  comp  Description of Parameter    */   public void removeLayoutComponent(Component comp) {   }   /**    *  Description of the Method    *    *@param  target  Description of Parameter    *@return         Description of the Returned Value    */   public Dimension preferredLayoutSize(Container target) {     synchronized (target.getTreeLock()) {       Dimension dim = new Dimension(0, 0);       int nmembers = target.getComponentCount();       boolean firstVisibleComponent = true;       for (int ii = 0; ii < nmembers; ii++) {         Component m = target.getComponent(ii);         if (m.isVisible()) {           Dimension d = m.getPreferredSize();           dim.width = Math.max(dim.width, d.width);           if (firstVisibleComponent) {             firstVisibleComponent = false;           }           else {             dim.height += _vgap;           }           dim.height += d.height;         }       }       Insets insets = target.getInsets();       dim.width += insets.left + insets.right + _hgap * 2;       dim.height += insets.top + insets.bottom + _vgap * 2;       return dim;     }   }   /**    *  Description of the Method    *    *@param  target  Description of Parameter    *@return         Description of the Returned Value    */   public Dimension minimumLayoutSize(Container target) {     synchronized (target.getTreeLock()) {       Dimension dim = new Dimension(0, 0);       int nmembers = target.getComponentCount();       boolean firstVisibleComponent = true;       for (int ii = 0; ii < nmembers; ii++) {         Component m = target.getComponent(ii);         if (m.isVisible()) {           Dimension d = m.getPreferredSize();           dim.width = Math.max(dim.width, d.width);           if (firstVisibleComponent) {             firstVisibleComponent = false;           }           else {             dim.height += _vgap;           }           dim.height += d.height;         }       }       Insets insets = target.getInsets();       dim.width += insets.left + insets.right + _hgap * 2;       dim.height += insets.top + insets.bottom + _vgap * 2;       return dim;     }   }   /**    *  Description of the Method    *    *@param  target  Description of Parameter    */   public void layoutContainer(Container target) {     synchronized (target.getTreeLock()) {       Insets insets = target.getInsets();       int maxheight = target.getHeight() - (insets.top + insets.bottom + _vgap * 2);       int nmembers = target.getComponentCount();       int y = 0;       Dimension preferredSize = preferredLayoutSize(target);       Dimension targetSize = target.getSize();       switch (_valign) {         case TOP:           y = insets.top;           break;         case CENTER:           y = (targetSize.height - preferredSize.height) / 2;           break;         case BOTTOM:           y = targetSize.height - preferredSize.height - insets.bottom;           break;       }       for (int i = 0; i < nmembers; i++) {         Component m = target.getComponent(i);         if (m.isVisible()) {           Dimension d = m.getPreferredSize();           m.setSize(d.width, d.height);           if ((y + d.height) <= maxheight) {             if (y > 0) {               y += _vgap;             }             int x = 0;             switch (_halign) {               case LEFT:                 x = insets.left;                 break;               case CENTER:                 x = (targetSize.width - d.width) / 2;                 break;               case RIGHT:                 x = targetSize.width - d.width - insets.right;                 break;             }             m.setLocation(x, y);             y += d.getHeight();           }           else {             break;           }         }       }     }   }   /** {@inheritDoc} */   @Override public String toString() {     String halign = "";     switch (_halign) {       case TOP:         halign = "top";         break;       case CENTER:         halign = "center";         break;       case BOTTOM:         halign = "bottom";         break;     }     String valign = "";     switch (_valign) {       case TOP:         valign = "top";         break;       case CENTER:         valign = "center";         break;       case BOTTOM:         valign = "bottom";         break;     }     return getClass().getName() + "[hgap=" + _hgap + ",vgap=" + _vgap + ",halign=" + halign + ",valign=" + valign + "]";   } }