FileDocCategorySizeDatePackage
EntryLayout.javaAPI DocExample5233Tue Oct 09 19:09:44 BST 2001None

EntryLayout

public class EntryLayout extends Object implements LayoutManager
A simple layout manager, for Entry areas like:
Login: _______________
Password: _______________
Basically two (or more) columns of different, but constant, widths. Note: all columns must be the same height!.

Construct instances by passing an array of the column width percentages (as doubles, fractions from 0.1 to 0.9, so 40%,60% would be {0.4, 0.6}). The length of this array uniquely determines the number of columns. Columns are forced to be the relevant widths. Note: As with GridLayout, the number of items added must be an even multiple of the number of columns. If not, exceptions may be thrown!

author
Ian F. Darwin, ian@darwinsys.com
version
$Id: EntryLayout.java,v 1.4 2001/10/09 22:09:44 ian Exp $

Fields Summary
protected final double[]
widthPercentages
The array of widths, as decimal fractions (0.4 == 40%, etc.).
protected final int
COLUMNS
The number of columns.
protected static final int
HPAD
The default padding
protected static final int
VPAD
protected final int
hpad
The actual padding
protected final int
vpad
protected boolean
validWidths
True if the list of widths was valid.
int[]
widths
The width of each column, as found by computLayoutSize().
int[]
heights
The height of each row, as found by computLayoutSize().
Constructors Summary
public EntryLayout(double[] widths, int h, int v)
Construct an EntryLayout with widths and padding specified.

param
widths Array of doubles specifying column widths.
param
h Horizontal padding between items
param
v Vertical padding between items


	          	       			     			   	 
	       
		COLUMNS = widths.length;
		widthPercentages = new double[COLUMNS];
		for (int i=0; i<widths.length; i++) {
			if (widths[i] >= 1.0)
				throw new IllegalArgumentException(
					"EntryLayout: widths must be fractions < 1");
			widthPercentages[i] = widths[i];
		}
		validWidths = true;
		hpad = h;
		vpad = v;
	
public EntryLayout(double[] widths)
Construct an EntryLayout with widths and with default padding amounts.

param
widths Array of doubles specifying column widths.

		this(widths, HPAD, VPAD);
	
Methods Summary
public voidaddLayoutComponent(java.lang.String name, java.awt.Component comp)
Adds the specified component with the specified constraint to the layout; required by LayoutManager but not used.

		// nothing to do
	
protected java.awt.DimensioncomputeLayoutSize(java.awt.Container parent, int hpad, int vpad)
Compute the size of the whole mess. Serves as the guts of preferredLayoutSize() and minimumLayoutSize().

		if (!validWidths)
			return null;
		Component[] components = parent.getComponents();
		Dimension contSize = parent.getSize();
		int preferredWidth = 0, preferredHeight = 0;
		widths = new int[COLUMNS];
		heights = new int[components.length / COLUMNS];
		// System.out.println("Grid: " + widths.length + ", " + heights.length);

		int i;
		// Pass One: Compute largest widths and heights.
		for (i=0; i<components.length; i++) {
			int row = i / widthPercentages.length;
			int col = i % widthPercentages.length;
			Component c = components[i];
			Dimension d = c.getPreferredSize();
			widths[col] = Math.max(widths[col], d.width);
			heights[row] = Math.max(heights[row], d.height);
		}

		// Pass two: agregate them.
		for (i=0; i<widths.length; i++)
			preferredWidth += widths[i] + hpad;
		for (i=0; i<heights.length; i++)
			preferredHeight += heights[i] + vpad;

		// Finally, pass the sums back as the actual size.
		return new Dimension(preferredWidth, preferredHeight);
	
public voidlayoutContainer(java.awt.Container parent)
Lays out the container in the specified panel.

		// System.out.println("layoutContainer:");
		if (!validWidths)
			return;
		Component[] components = parent.getComponents();
		Dimension contSize = parent.getSize();
		for (int i=0; i<components.length; i++) {
			int row = i / COLUMNS;
			int col = i % COLUMNS;
			Component c = components[i];
			Dimension d = c.getPreferredSize();
			int colWidth = (int)(contSize.width * widthPercentages[col]);
			Rectangle r = new Rectangle(
				col == 0 ? 0 :
				hpad * (col-1) + (int)(contSize.width * widthPercentages[col-1]),
				vpad * (row) + (row * heights[row]) + (heights[row]-d.height),
				colWidth, d.height);
			// System.out.println(c.getClass() + "-->" + r);
			c.setBounds(r);
		}
	
public java.awt.DimensionminimumLayoutSize(java.awt.Container parent)
Find the minimum Dimension for the specified container given the components therein.

		// System.out.println("minimumLayoutSize");
		return computeLayoutSize(parent, 0, 0);
	
public java.awt.DimensionpreferredLayoutSize(java.awt.Container parent)
Calculates the preferred size dimensions for the specified panel given the components in the specified parent container.

		// System.out.println("preferredLayoutSize");
		return computeLayoutSize(parent, hpad, vpad);
	
public voidremoveLayoutComponent(java.awt.Component comp)
Removes the specified component from the layout; required by LayoutManager, but does nothing.

		// nothing to do