Mega Code Archive

 
Categories / Java Tutorial / Swing
 

DividerLayout is layout that divides two components with the column of actions

/*  * $Id: DividerLayout.java,v 1.1.1.1 2005/04/07 18:36:20 pocho Exp $  */ // Revised from javautils swing; import java.awt.Component; import java.awt.Container; import java.awt.Dimension; import java.awt.Insets; import java.awt.LayoutManager2; import java.awt.Rectangle; /**  * <p>  * <code>DividerLayout</code> is layout that divides two components with the  * column of actions. It is especially usefull for components that contains  * two lists of elements and buttons for transfering elements between these  * two lists.  * </p>  * <p>  *   Components are indicated as {@link #WEST}, {@link #EAST} and {@link #CENTER}.  * </p>  *   * @version $Name:  $ - $Revision: 1.1.1.1 $ - $Date: 2005/04/07 18:36:20 $  * TODO Test  */ public class DividerLayout implements LayoutManager2 {      /**    * Indicates west component    */   public final static String WEST = "WEST";   /**    * indicates east component    */   public final static String EAST = "EAST";   /**    * indicates center component    */   public final static String CENTER = "CENTER";   /**    * west component    */   protected Component westComponent;      /**    * center component    */   protected Component centerComponent;      /**    * east component    */   protected Component eastComponent;      /**    * Adds a component to specified position.    */   public void addLayoutComponent(Component comp, Object constraints) {     if (WEST.equalsIgnoreCase((String) constraints)) {       westComponent = comp;     }     else if (CENTER.equalsIgnoreCase((String) constraints)) {       centerComponent = comp;     }     else if (EAST.equalsIgnoreCase((String) constraints)) {       eastComponent = comp;     }   }   /**    * @see java.awt.LayoutManager2#maximumLayoutSize(java.awt.Container)    */   public Dimension maximumLayoutSize(Container target) {     Dimension size;     int width = 0;     int height = 0;     if ((westComponent != null) && (westComponent.isVisible())) {       size = westComponent.getMaximumSize();       width = Math.max(width, size.width);       height = Math.max(height, size.height);     }     if ((eastComponent != null) && (eastComponent.isVisible())) {       size = eastComponent.getMaximumSize();       width = Math.max(width, size.width);       height = Math.max(height, size.height);     }     width *= 2;     if ((centerComponent != null) && (centerComponent.isVisible())) {       size = centerComponent.getPreferredSize();       width += size.width;       height = Math.max(height, size.height);     }     return new Dimension(width, height);   }   /**    * @see java.awt.LayoutManager2#getLayoutAlignmentX(java.awt.Container)    */   public float getLayoutAlignmentX(Container target) {     return 0.0f;   }   /**    * @see java.awt.LayoutManager2#getLayoutAlignmentY(java.awt.Container)    */   public float getLayoutAlignmentY(Container target) {     return 0.0f;   }   /**    * @see java.awt.LayoutManager2#invalidateLayout(java.awt.Container)    */   public void invalidateLayout(Container target) {}   /**    * @see java.awt.LayoutManager#addLayoutComponent(java.lang.String, java.awt.Component)    */   public void addLayoutComponent(String name, Component comp) {     addLayoutComponent(comp, name);   }   /**    * @see java.awt.LayoutManager#removeLayoutComponent(java.awt.Component)    */   public void removeLayoutComponent(Component comp) {     if (comp == westComponent) {       westComponent = null;     }     else if (comp == centerComponent) {       centerComponent = null;     }     else if (comp == eastComponent) {       centerComponent = null;     }   }      /**    * @see java.awt.LayoutManager#preferredLayoutSize(java.awt.Container)    */   public Dimension preferredLayoutSize(Container parent) {     Dimension size;     int width = 0;     int height = 0;     if ((westComponent != null) && (westComponent.isVisible())) {       size = westComponent.getPreferredSize();       width = Math.max(width, size.width);       height = Math.max(height, size.height);     }     if ((eastComponent != null) && (eastComponent.isVisible())) {       size = eastComponent.getPreferredSize();       width = Math.max(width, size.width);       height = Math.max(height, size.height);     }     width *= 2;     if ((centerComponent != null) && (centerComponent.isVisible())) {       size = centerComponent.getPreferredSize();       width += size.width;       height = Math.max(height, size.height);     }     return new Dimension(width, height);   }   /**    * @see java.awt.LayoutManager#minimumLayoutSize(java.awt.Container)    */   public Dimension minimumLayoutSize(Container parent) {     Dimension size;     int width = 0;     int height = 0;     if ((westComponent != null) && (westComponent.isVisible())) {       size = westComponent.getMinimumSize();       width = Math.max(width, size.width);       height = Math.max(height, size.height);     }     if ((eastComponent != null) && (eastComponent.isVisible())) {       size = eastComponent.getMinimumSize();       width = Math.max(width, size.width);       height = Math.max(height, size.height);     }     width *= 2;     if ((centerComponent != null) && (centerComponent.isVisible())) {       size = centerComponent.getPreferredSize();       width += size.width;       height += Math.max(height, size.height);     }     return new Dimension(width, height);   }   /**    * @see java.awt.LayoutManager#layoutContainer(java.awt.Container)    */   public void layoutContainer(Container container) {    Insets insets = container.getInsets();    Dimension westSize = new Dimension(0, 0);    Dimension centerSize = new Dimension(0, 0);    Dimension eastSize = new Dimension(0, 0);    Rectangle centerBounds = new Rectangle(0, 0, 0, 0);    Dimension containerSize = container.getSize();    int centerX = containerSize.width / 2;    int centerY = containerSize.height / 2;    if ((centerComponent != null) &&        (centerComponent.isVisible())) {      centerSize = centerComponent.getPreferredSize();      centerSize.width = Math.min(centerSize.width,          containerSize.width - insets.left -          insets.right);      centerSize.height = Math.min(centerSize.height,          containerSize.height - insets.top -          insets.bottom);      centerComponent.setBounds(centerX -          (centerSize.width / 2),          centerY - (centerSize.height / 2),          centerSize.width, centerSize.height);      centerBounds = centerComponent.getBounds();    }    if ((westComponent != null) && (westComponent.isVisible())) {      westSize = westComponent.getPreferredSize();    }    if ((eastComponent != null) && (eastComponent.isVisible())) {      eastSize = eastComponent.getPreferredSize();    }   /* int maxWidth = Math.min(westSize.width, eastSize.width);    maxWidth = Math.min(maxWidth, (containerSize.width -        centerBounds.width - insets.left -        insets.right) / 2);*/   int maxWidth = (containerSize.width -        centerBounds.width - insets.left -        insets.right) / 2;   /* int maxHeight = Math.min(westSize.height, eastSize.height);     maxHeight = Math.max(maxHeight, containerSize.height -        insets.top - insets.bottom);*/   int maxHeight=containerSize.height - insets.top - insets.bottom;    if (westComponent != null) {      westComponent.setBounds(centerBounds.x - maxWidth,          centerY - (maxHeight / 2),          maxWidth, maxHeight);    }    if (eastComponent != null) {      eastComponent.setBounds(centerBounds.x +          centerBounds.width,          centerY - (maxHeight / 2),          maxWidth, maxHeight);    }  } }