DividerLayout is layout that divides two components with the column of actions : Custom Layout « Swing « Java Tutorial






/*
 * $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);
   }
 }


}








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