import java.awt.*;
import javax.swing.*;

public class FormPanel extends JPanel {
	private GridBagConstraints leftSideGBC;
	private GridBagConstraints rightSideGBC;
	private boolean initialized;

	public FormPanel() {
		super();
		initialized = false;
		setLayout(new GridBagLayout());

		leftSideGBC = new GridBagConstraints();
		leftSideGBC.anchor = GridBagConstraints.NORTHEAST;
		leftSideGBC.insets = new Insets(2, 2, 2, 2);

		rightSideGBC = new GridBagConstraints();
		rightSideGBC.anchor = GridBagConstraints.NORTHWEST;
		rightSideGBC.insets = new Insets(2, 2, 2, 2);
		rightSideGBC.gridwidth = GridBagConstraints.REMAINDER;
		initialized = true;
	}

	public final void setLayout(LayoutManager lm) {
		if ( initialized ) {
			// prevent accidental calls
			throw new RuntimeException(
				"can not change the layout manager for FormPanel");
		} else {
			super.setLayout(lm);
		}
	}

	// called indirectly by the various add methods of Container
	protected final void addImpl(
				Component child, 
				Object constraints, 
				int index
			) {

		// NOTE: constraints and passed in and index are ignored

		int count = getComponentCount();

		if ( ( count % 2 ) == 0 ) {
			super.addImpl(child, leftSideGBC, -1);
		} else {
			super.addImpl(child, rightSideGBC, -1);
		}
	}
}
