home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 1997 October
/
Chip_1997-10_cd.bin
/
tema
/
sybase
/
powerj
/
java.z
/
BorderLayout.java
< prev
next >
Wrap
Text File
|
1996-05-03
|
7KB
|
236 lines
/*
* @(#)BorderLayout.java 1.17 95/09/08 Arthur van Hoff
*
* Copyright (c) 1994-1995 Sun Microsystems, Inc. All Rights Reserved.
*
* Permission to use, copy, modify, and distribute this software
* and its documentation for NON-COMMERCIAL purposes and without
* fee is hereby granted provided that this copyright notice
* appears in all copies. Please refer to the file "copyright.html"
* for further important copyright and licensing information.
*
* SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
* THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
* TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
* PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
* ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
* DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
*/
package java.awt;
import java.util.Hashtable;
/**
* A TNT style border bag layout. It will layout a container
* using members named "North", "South", "East", "West" and
* "Center".
*
* The "North", "South", "East" and "West" components get layed out
* according to their preferred sizes and the constraints of the
* container's size. The "Center" component will get any space left
* over.
*
* @version 1.17 08 Sep 1995
* @author Arthur van Hoff
*/
public class BorderLayout implements LayoutManager {
int hgap;
int vgap;
Component north;
Component west;
Component east;
Component south;
Component center;
/**
* Constructs a new BorderLayout.
*/
public BorderLayout() {
}
/**
* Constructs a BorderLayout with the specified gaps.
* @param hgap the horizontal gap
* @param vgap the vertical gap
*/
public BorderLayout(int hgap, int vgap) {
this.hgap = hgap;
this.vgap = vgap;
}
/**
* Adds the specified named component to the layout.
* @param name the String name
* @param comp the component to be added
*/
public void addLayoutComponent(String name, Component comp) {
if ("Center".equals(name)) {
center = comp;
} else if ("North".equals(name)) {
north = comp;
} else if ("South".equals(name)) {
south = comp;
} else if ("East".equals(name)) {
east = comp;
} else if ("West".equals(name)) {
west = comp;
}
}
/**
* Removes the specified component from the layout.
* @param comp the component to be removed
*/
public void removeLayoutComponent(Component comp) {
if (comp == center) {
center = null;
} else if (comp == north) {
north = null;
} else if (comp == south) {
south = null;
} else if (comp == east) {
east = null;
} else if (comp == west) {
west = null;
}
}
/**
* Returns the minimum dimensions needed to layout the components
* contained in the specified target container.
* @param target the Container on which to do the layout
* @see Container
* @see #preferredLayoutSize
*/
public Dimension minimumLayoutSize(Container target) {
Dimension dim = new Dimension(0, 0);
if ((east != null) && east.visible) {
Dimension d = east.minimumSize();
dim.width += d.width + hgap;
dim.height = Math.max(d.height, dim.height);
}
if ((west != null) && west.visible) {
Dimension d = west.minimumSize();
dim.width += d.width + hgap;
dim.height = Math.max(d.height, dim.height);
}
if ((center != null) && center.visible) {
Dimension d = center.minimumSize();
dim.width += d.width;
dim.height = Math.max(d.height, dim.height);
}
if ((north != null) && north.visible) {
Dimension d = north.minimumSize();
dim.width = Math.max(d.width, dim.width);
dim.height += d.height + vgap;
}
if ((south != null) && south.visible) {
Dimension d = south.minimumSize();
dim.width = Math.max(d.width, dim.width);
dim.height += d.height + vgap;
}
Insets insets = target.insets();
dim.width += insets.left + insets.right;
dim.height += insets.top + insets.bottom;
return dim;
}
/**
* Returns the preferred dimensions for this layout given the components
* in the specified target container.
* @param target the component which needs to be laid out
* @see Container
* @see #minimumLayoutSize
*/
public Dimension preferredLayoutSize(Container target) {
Dimension dim = new Dimension(0, 0);
if ((east != null) && east.visible) {
Dimension d = east.preferredSize();
dim.width += d.width + hgap;
dim.height = Math.max(d.height, dim.height);
}
if ((west != null) && west.visible) {
Dimension d = west.preferredSize();
dim.width += d.width + hgap;
dim.height = Math.max(d.height, dim.height);
}
if ((center != null) && center.visible) {
Dimension d = center.preferredSize();
dim.width += d.width;
dim.height = Math.max(d.height, dim.height);
}
if ((north != null) && north.visible) {
Dimension d = north.preferredSize();
dim.width = Math.max(d.width, dim.width);
dim.height += d.height + vgap;
}
if ((south != null) && south.visible) {
Dimension d = south.preferredSize();
dim.width = Math.max(d.width, dim.width);
dim.height += d.height + vgap;
}
Insets insets = target.insets();
dim.width += insets.left + insets.right;
dim.height += insets.top + insets.bottom;
return dim;
}
/**
* Lays out the specified container. This method will actually reshape the
* components in the specified target container in order to satisfy the
* constraints of the BorderLayout object.
* @param target the component being laid out
* @see Container
*/
public void layoutContainer(Container target) {
Insets insets = target.insets();
int top = insets.top;
int bottom = target.height - insets.bottom;
int left = insets.left;
int right = target.width - insets.right;
if ((north != null) && north.visible) {
north.resize(right - left, north.height);
Dimension d = north.preferredSize();
north.reshape(left, top, right - left, d.height);
top += d.height + vgap;
}
if ((south != null) && south.visible) {
south.resize(right - left, south.height);
Dimension d = south.preferredSize();
south.reshape(left, bottom - d.height, right - left, d.height);
bottom -= d.height + vgap;
}
if ((east != null) && east.visible) {
east.resize(east.width, bottom - top);
Dimension d = east.preferredSize();
east.reshape(right - d.width, top, d.width, bottom - top);
right -= d.width + hgap;
}
if ((west != null) && west.visible) {
west.resize(west.width, bottom - top);
Dimension d = west.preferredSize();
west.reshape(left, top, d.width, bottom - top);
left += d.width + hgap;
}
if ((center != null) && center.visible) {
center.reshape(left, top, right - left, bottom - top);
}
}
/**
* Returns the String representation of this BorderLayout's values.
*/
public String toString() {
return getClass().getName() + "[hgap=" + hgap + ",vgap=" + vgap + "]";
}
}