EntryLayoutpublic class EntryLayout extends Object implements LayoutManagerA simple layout manager, for "Entry" areas ith e.g., a list of labels
and their corresponding JTextFields. These typically look 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! |
Fields Summary |
---|
protected final double[] | widthPercentagesThe array of widths, as decimal fractions (0.4 == 40%, etc.). | protected final int | COLUMNSThe number of columns. | protected static final int | HPADThe default padding | protected static final int | VPAD | protected final int | hpadThe actual padding | protected final int | vpad | protected boolean | validWidthsTrue if the list of widths was valid. | int[] | widthsThe width of each column, as found by computLayoutSize(). | int[] | heightsThe height of each row, as found by computLayoutSize(). |
Constructors Summary |
---|
public EntryLayout(double[] relWidths, int h, int v)Construct an EntryLayout with widths and padding specified.
COLUMNS = relWidths.length;
widthPercentages = new double[COLUMNS];
for (int i=0; i<relWidths.length; i++) {
if (relWidths[i] >= 1.0)
throw new IllegalArgumentException(
"EntryLayout: widths must be fractions < 1");
widthPercentages[i] = relWidths[i];
}
validWidths = true;
hpad = h;
vpad = v;
| public EntryLayout(double[] relWidths)Construct an EntryLayout with widths and with default padding amounts.
this(relWidths, HPAD, VPAD);
|
Methods Summary |
---|
public void | addLayoutComponent(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.Dimension | computeLayoutSize(java.awt.Container parent, int hp, int vp)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] + hp;
for (i=0; i<heights.length; i++)
preferredHeight += heights[i] + vp;
// Finally, pass the sums back as the actual size.
return new Dimension(preferredWidth, preferredHeight);
| public void | layoutContainer(java.awt.Container parent)Lays out the container in the specified panel. This is a row-column
type layout; find x, y, width and height of each Component.
Debug.println("layout","layoutContainer:");
if (!validWidths)
return;
Component[] components = parent.getComponents();
Dimension contSize = parent.getSize();
int x = 0;
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]);
if (col == 0) {
x = hpad;
} else {
x += hpad * (col-1) + (int)(contSize.width * widthPercentages[col-1]);
}
int y = vpad * (row) + (row * heights[row]) + (heights[row]-d.height);
Rectangle r = new Rectangle(x, y, colWidth, d.height);
c.setBounds(r);
}
| public java.awt.Dimension | minimumLayoutSize(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.Dimension | preferredLayoutSize(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 void | removeLayoutComponent(java.awt.Component comp)Removes the specified component from the layout;
required by LayoutManager, but does nothing.
// nothing to do
|
|