public static void makeGrid(Container parent,
                                int rows, int cols,
                                int initialX, int initialY,
                                int xPad, int yPad) {
        SpringLayout layout;
        try {
            layout = (SpringLayout)parent.getLayout();
        } catch (ClassCastException exc) {
            System.err.println("The first argument to makeGrid must use SpringLayout.");
            return;
        }

        Spring xPadSpring = Spring.constant(xPad);
        Spring yPadSpring = Spring.constant(yPad);
        Spring initialXSpring = Spring.constant(initialX);
        Spring initialYSpring = Spring.constant(initialY);
        int max = rows * cols;

        //Calculate Springs that are the max of the width/height so that all
        //cells have the same size.
        Spring maxWidthSpring = layout.getConstraints(parent.getComponent(0)).
                                    getWidth();
        Spring maxHeightSpring = layout.getConstraints(parent.getComponent(0)).
                                    getWidth();
        for (int i = 1; i < max; i++) {
            SpringLayout.Constraints cons = layout.getConstraints(
                                            parent.getComponent(i));

            maxWidthSpring = Spring.max(maxWidthSpring, cons.getWidth());
            maxHeightSpring = Spring.max(maxHeightSpring, cons.getHeight());
        }

        //Apply the new width/height Spring. This forces all the
        //components to have the same size.
        for (int i = 0; i < max; i++) {
            SpringLayout.Constraints cons = layout.getConstraints(
                                            parent.getComponent(i));

            cons.setWidth(maxWidthSpring);
            cons.setHeight(maxHeightSpring);
        }

        //Then adjust the x/y constraints of all the cells so that they
        //are aligned in a grid.
        SpringLayout.Constraints lastCons = null;
        SpringLayout.Constraints lastRowCons = null;
        for (int i = 0; i < max; i++) {
            SpringLayout.Constraints cons = layout.getConstraints(
                                                 parent.getComponent(i));
            if (i % cols == 0) { //start of new row
                lastRowCons = lastCons;
                cons.setX(initialXSpring);
            } else { //x position depends on previous component
                cons.setX(Spring.sum(lastCons.getConstraint(SpringLayout.EAST),
                                     xPadSpring));
            }

            if (i / cols == 0) { //first row
                cons.setY(initialYSpring);
            } else { //y position depends on previous row
                cons.setY(Spring.sum(lastRowCons.getConstraint(SpringLayout.SOUTH),
                                     yPadSpring));
            }
            lastCons = cons;
        }

        //Set the parent's size.
        SpringLayout.Constraints pCons = layout.getConstraints(parent);
        pCons.setConstraint(SpringLayout.SOUTH,
                            Spring.sum(
                                Spring.constant(yPad),
                                lastCons.getConstraint(SpringLayout.SOUTH)));
        pCons.setConstraint(SpringLayout.EAST,
                            Spring.sum(
                                Spring.constant(xPad),
                                lastCons.getConstraint(SpringLayout.EAST)));
    }
public static void makeGrid ( Container parent , int rows , int cols , int initialX , int initialY , int xPad , int yPad ) { SpringLayout layout ; try { layout = ( SpringLayout ) parent . getLayout ( ) ; } catch ( ClassCastException exc ) { System . err . println ( "The first argument to makeGrid must use SpringLayout." ) ; return ; } Spring xPadSpring = Spring . constant ( xPad ) ; Spring yPadSpring = Spring . constant ( yPad ) ; Spring initialXSpring = Spring . constant ( initialX ) ; Spring initialYSpring = Spring . constant ( initialY ) ; int max = rows * cols ; Spring maxWidthSpring = layout . getConstraints ( parent . getComponent ( 0 ) ) . getWidth ( ) ; Spring maxHeightSpring = layout . getConstraints ( parent . getComponent ( 0 ) ) . getWidth ( ) ; for ( int i = 1 ; i < max ; i ++ ) { SpringLayout . Constraints cons = layout . getConstraints ( parent . getComponent ( i ) ) ; maxWidthSpring = Spring . max ( maxWidthSpring , cons . getWidth ( ) ) ; maxHeightSpring = Spring . max ( maxHeightSpring , cons . getHeight ( ) ) ; } for ( int i = 0 ; i < max ; i ++ ) { SpringLayout . Constraints cons = layout . getConstraints ( parent . getComponent ( i ) ) ; cons . setWidth ( maxWidthSpring ) ; cons . setHeight ( maxHeightSpring ) ; } SpringLayout . Constraints lastCons = null ; SpringLayout . Constraints lastRowCons = null ; for ( int i = 0 ; i < max ; i ++ ) { SpringLayout . Constraints cons = layout . getConstraints ( parent . getComponent ( i ) ) ; if ( i % cols == 0 ) { lastRowCons = lastCons ; cons . setX ( initialXSpring ) ; } else { cons . setX ( Spring . sum ( lastCons . getConstraint ( SpringLayout . EAST ) , xPadSpring ) ) ; } if ( i / cols == 0 ) { cons . setY ( initialYSpring ) ; } else { cons . setY ( Spring . sum ( lastRowCons . getConstraint ( SpringLayout . SOUTH ) , yPadSpring ) ) ; } lastCons = cons ; } SpringLayout . Constraints pCons = layout . getConstraints ( parent ) ; pCons . setConstraint ( SpringLayout . SOUTH , Spring . sum ( Spring . constant ( yPad ) , lastCons . getConstraint ( SpringLayout . SOUTH ) ) ) ; pCons . setConstraint ( SpringLayout . EAST , Spring . sum ( Spring . constant ( xPad ) , lastCons . getConstraint ( SpringLayout . EAST ) ) ) ; }
Aligns the first <code>rows</code> * <code>cols</code>
components of <code>parent</code> in
a grid. Each component is as big as the maximum
preferred width and height of the components.
The parent is made just big enough to fit them all.

@param rows number of rows
@param cols number of columns
@param initialX x location to start the grid at
@param initialY y location to start the grid at
@param xPad x padding between cells
@param yPad y padding between cells