


public interface LayoutManager
{
void layoutContainer(Container parent);
Dimension minimumLayoutSize(Container parent);
Dimension preferredLayoutSize(Container parent);
void addLayoutComponent(String name, Component comp);
void removeLayoutComponent(Component comp);
}
FormLayout.javaimport java.awt.*;
/**
   A layout manager that lays out components along a central axis
*/
class FormLayout implements LayoutManager
{  
   public Dimension preferredLayoutSize(Container parent)
   {  
      Component[] components = parent.getComponents();
      left = 0;
      right = 0;
      height = 0;
      for (int i = 0; i < components.length; i += 2)
      {
         Component cleft = components[i];
         Component cright = components[i + 1];
         Dimension dleft = cleft.getPreferredSize();
         Dimension dright = cright.getPreferredSize();
         left = Math.max(left, dleft.width);
         right = Math.max(right, dright.width);
         height = height + Math.max(dleft.height,
            dright.height);
      }      
      return new Dimension(left + GAP + right, height);
   }
      
   public Dimension minimumLayoutSize(Container parent)
   {  
      return preferredLayoutSize(parent);
   }
   public void layoutContainer(Container parent)
   {  
      preferredLayoutSize(parent); // sets left, right
      Component[] components = parent.getComponents();
      Insets insets = parent.getInsets();
      int xcenter = insets.left + left;
      int y = insets.top;
      for (int i = 0; i < components.length; i += 2)
      {
         Component cleft = components[i];
         Component cright = components[i + 1];
         Dimension dleft = cleft.getPreferredSize();
         Dimension dright = cright.getPreferredSize();
         int height = Math.max(dleft.height,
            dright.height);
         cleft.setBounds(xcenter - dleft.width, y + (height -
            dleft.height) / 2, dleft.width, dleft.height);
         cright.setBounds(xcenter + GAP, y + (height 
            - dright.height) / 2, dright.width, dright.height);
         y += height;
      }
   }
   public void addLayoutComponent(String name,
      Component comp)
   {}
   public void removeLayoutComponent(Component comp)
   {}
   private int left;
   private int right;
   private int height;
   private static final int GAP = 6;
}
FormLayoutTest.javaimport java.awt.*;
import javax.swing.*;
public class FormLayoutTest
{
   public static void main(String[] args)
   {  
      JFrame frame = new JFrame();
      Container contentPane = frame.getContentPane();
      contentPane.setLayout(new FormLayout());
      contentPane.add(new JLabel("Name"));
      contentPane.add(new JTextField(15));
      contentPane.add(new JLabel("Address"));
      contentPane.add(new JTextField(20));
      contentPane.add(new JLabel("City"));
      contentPane.add(new JTextField(10));
      contentPane.add(new JLabel("State"));
      contentPane.add(new JTextField(2));
      contentPane.add(new JLabel("ZIP"));
      contentPane.add(new JTextField(5));
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.pack();
      frame.setVisible(true);
   }
}
 
Maintained by John Loomis, updated Sun Feb 25 20:38:43 2007