Added makeCompactGrid().

git-svn-id: https://samskivert.googlecode.com/svn/trunk@1414 6335cc39-0255-0410-8fd6-9bcaacd3b74c
This commit is contained in:
mdb
2004-03-13 16:07:53 +00:00
parent 72ec095af1
commit 7ca51ded20
@@ -1,5 +1,5 @@
//
// $Id: SwingUtil.java,v 1.30 2004/02/25 13:17:41 mdb Exp $
// $Id: SwingUtil.java,v 1.31 2004/03/13 16:07:53 mdb Exp $
//
// samskivert library - useful routines for java programs
// Copyright (C) 2001 Michael Bayne
@@ -49,6 +49,8 @@ import javax.swing.BorderFactory;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.Spring;
import javax.swing.SpringLayout;
import javax.swing.text.AbstractDocument;
import javax.swing.text.AttributeSet;
@@ -597,6 +599,80 @@ public class SwingUtil
}
}
/**
* Aligns the first <code>rows</code> * <code>cols</code> components
* of <code>parent</code> in a grid. Each component in a column is as
* wide as the maximum preferred width of the components in that
* column; height is similarly determined for each row. The parent is
* made just big enough to fit them all. The components should be
* already added to the parent in row-major order.
*
* @param parent the container component; must be configured with a
* {@link SpringLayout} prior to calling this method.
* @param rows number of rows.
* @param cols number of columns.
* @param initialX x location at which to start the grid.
* @param initialY y location at which to start the grid.
* @param xPad x padding between cells.
* @param yPad y padding between cells.
*/
public static void makeCompactGrid (
Container parent, int rows, int cols,
int initialX, int initialY, int xPad, int yPad)
{
SpringLayout layout = (SpringLayout)parent.getLayout();
// align all cells in each column and make them the same width
Spring x = Spring.constant(initialX);
for (int c = 0; c < cols; c++) {
Spring width = Spring.constant(0);
for (int r = 0; r < rows; r++) {
width = Spring.max(
width, getConstraintsForCell(
r, c, parent, cols).getWidth());
}
for (int r = 0; r < rows; r++) {
SpringLayout.Constraints constraints =
getConstraintsForCell(r, c, parent, cols);
constraints.setX(x);
constraints.setWidth(width);
}
x = Spring.sum(x, Spring.sum(width, Spring.constant(xPad)));
}
// align all cells in each row and make them the same height
Spring y = Spring.constant(initialY);
for (int r = 0; r < rows; r++) {
Spring height = Spring.constant(0);
for (int c = 0; c < cols; c++) {
height = Spring.max(
height, getConstraintsForCell(
r, c, parent, cols).getHeight());
}
for (int c = 0; c < cols; c++) {
SpringLayout.Constraints constraints =
getConstraintsForCell(r, c, parent, cols);
constraints.setY(y);
constraints.setHeight(height);
}
y = Spring.sum(y, Spring.sum(height, Spring.constant(yPad)));
}
// set the parent's size
SpringLayout.Constraints pcons = layout.getConstraints(parent);
pcons.setConstraint(SpringLayout.SOUTH, y);
pcons.setConstraint(SpringLayout.EAST, x);
}
/* Used by {@link #makeCompactGrid}. */
protected static SpringLayout.Constraints getConstraintsForCell (
int row, int col, Container parent, int cols)
{
SpringLayout layout = (SpringLayout)parent.getLayout();
Component c = parent.getComponent(row * cols + col);
return layout.getConstraints(c);
}
/** Used by {@link #addDebugBorders}. */
protected static Random _rando = new Random();
}