home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1995 November / PCWK1195.iso / inne / win95 / sieciowe / hotja32.lzh / hotjava / classsrc / awt / borderlayout.java next >
Text File  |  1995-08-11  |  5KB  |  156 lines

  1. /*
  2.  * @(#)BorderLayout.java    1.22 95/01/31 Arthur van Hoff
  3.  *
  4.  * Copyright (c) 1994 Sun Microsystems, Inc. All Rights Reserved.
  5.  *
  6.  * Permission to use, copy, modify, and distribute this software
  7.  * and its documentation for NON-COMMERCIAL purposes and without
  8.  * fee is hereby granted provided that this copyright notice
  9.  * appears in all copies. Please refer to the file "copyright.html"
  10.  * for further important copyright and licensing information.
  11.  *
  12.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
  13.  * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
  14.  * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
  15.  * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
  16.  * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
  17.  * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
  18.  */
  19.  
  20. package awt;
  21.  
  22. /**
  23.  * A TNT style border bag layout. It will layout a container
  24.  * using members named "North", "South", "East", "West" and
  25.  * "Center".
  26.  *
  27.  * The "North", "South", "East" and "West" components get layed out
  28.  * according to their preferred sizes and the constraints of the
  29.  * container's size. The "Center" component will get any space left
  30.  * over. 
  31.  * 
  32.  * To use a BorderLayout in a window do the following:
  33.  *<pre>
  34.  *    Window win = new Window(parent, "", Color.lightGray, 200, 200);
  35.  *    win.setLayout(new BorderLayout());
  36.  *</pre>
  37.  * 
  38.  * @see awt.Window
  39.  * @see awt.Frame
  40.  * @version 1.22 31 Jan 1995
  41.  * @author Arthur van Hoff
  42.  */
  43. public class BorderLayout extends GapsLayout {
  44.     /**
  45.      * Use this object to set a border layout for a window with
  46.      * standard properties.
  47.      */
  48.     public static BorderLayout defaultLayout;
  49.  
  50.     static {
  51.     defaultLayout = new BorderLayout();
  52.     defaultLayout.setGaps(0, 0, 0, 0);
  53.     }
  54.  
  55.     /**
  56.      * Return the minimum dimensions needed to layout the components
  57.      * contained in pTarget. 
  58.      * @param pTarget is the Container on which to do the layout.
  59.      * @see awt.Container
  60.      */
  61.     public Dimension minDimension(Container pTarget) {
  62.     int insets[] = getInsets(pTarget);
  63.     int vert = insets[NORTH] + insets[SOUTH];
  64.     int horz = insets[WEST]  + insets[EAST];
  65.     Dimension dim = new Dimension(horz, vert);
  66.     Layoutable m;
  67.  
  68.     if ((m = pTarget.getChild("North")) != null) {
  69.         Dimension d = m.minDimension();
  70.         dim.width = max(d.width + ((Component)m).marginWidth, dim.width);
  71.         vert += d.height + ((Component)m).marginHeight + gaps[NORTH];
  72.     }
  73.     if ((m = pTarget.getChild("South")) != null) {
  74.         Dimension d = m.minDimension();
  75.         dim.width = max(d.width + ((Component)m).marginWidth,dim.width);
  76.         vert += d.height + ((Component)m).marginHeight + gaps[SOUTH];
  77.     }
  78.     if ((m = pTarget.getChild("East")) != null) {
  79.         Dimension d = m.minDimension();
  80.         dim.height = max(d.height, dim.height) + vert;
  81.         horz += d.width + gaps[EAST];
  82.     }
  83.     if ((m = pTarget.getChild("West")) != null) {
  84.         Dimension d = m.minDimension();
  85.         dim.height = max(d.height, dim.height) + vert;
  86.         horz += d.width + gaps[EAST];
  87.     }
  88.     if ((m = pTarget.getChild("Center")) != null) {
  89.         Dimension d = m.minDimension();
  90.         dim.width = max(d.width, dim.width) + horz;
  91.         dim.height = max(d.height, dim.height) + vert;
  92.     }
  93.  
  94.     return dim;
  95.     }
  96.     
  97.     /**
  98.      * Return the preferred size for this layout given the components
  99.      * in pTarget.
  100.      * @param pTarget is the component which needs to be laid out.
  101.      * @see awt.Container
  102.      */
  103.     public Dimension getPreferredSize(Container pTarget) {
  104.     Dimension d = minDimension(pTarget);
  105.  
  106.     return minDimension(pTarget);
  107.     }
  108.  
  109.     /**
  110.      * Layout the container. This method will actually reshape the
  111.      * components in pTarget in order to satisfy the constraints of
  112.      * the BorderLayout object. Normally this method is invoked by the
  113.      * container.
  114.      * @param pTarget is the component being laid out.
  115.      * @see awt.Container
  116.      */
  117.     public void layout(Container pTarget) {
  118.     int insets[] = getInsets(pTarget);
  119.     int top = 0;
  120.     int bottom = pTarget.height - insets[SOUTH] - gaps[SOUTH];
  121.     int left = insets[WEST];
  122.     int right = pTarget.width - insets[EAST];
  123.     Layoutable m;
  124.  
  125.     top += insets[NORTH] + gaps[NORTH];
  126.     if ((m = pTarget.getChild("North")) != null) {
  127.         Dimension d = m.getPreferredSize();
  128.         m.reshape(left, top, right - left, d.height);
  129.         top += d.height;
  130.     }
  131.     if ((m = pTarget.getChild("South")) != null) {
  132.         Dimension d = m.getPreferredSize();
  133.         m.reshape(left, bottom - d.height, right - left, d.height);
  134.         bottom -= d.height;
  135.     }
  136.     if ((m = pTarget.getChild("East")) != null) {
  137.         Dimension d = m.getPreferredSize();
  138.         m.reshape(right - d.width, top, d.width,
  139.               max(d.height, bottom - top));
  140.         right -= (d.width + gaps[EAST]);
  141.     } else {
  142.         right -= gaps[EAST];
  143.     }
  144.     if ((m = pTarget.getChild("West")) != null) {
  145.         Dimension d = m.getPreferredSize();
  146.         m.reshape(left, top, d.width, bottom - top);
  147.         left += d.width + gaps[WEST];
  148.     } else {
  149.         left += gaps[WEST];
  150.     }
  151.     if ((m = pTarget.getChild("Center")) != null) {
  152.         m.reshape(left, top, right - left, bottom - top);
  153.     }
  154.     }
  155. }
  156.