Mega Code Archive

 
Categories / Java Tutorial / Swing
 

A layout manager that lays out components along a central axis

import java.awt.Component; import java.awt.Container; import java.awt.Dimension; import java.awt.Insets; import java.awt.LayoutManager; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextField; public class FormLayoutTester {   public static void main(String[] args) {     JFrame frame = new JFrame();     frame.setLayout(new FormLayout());     frame.add(new JLabel("A"));     frame.add(new JTextField(15));     frame.add(new JLabel("AA"));     frame.add(new JTextField(20));     frame.add(new JLabel("AAAA"));     frame.add(new JTextField(10));     frame.add(new JLabel("AAAAAA"));     frame.add(new JTextField(2));     frame.add(new JLabel("AAAAAAAA"));     frame.add(new JTextField(5));     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     frame.pack();     frame.setVisible(true);   } } /**  * A layout manager that lays out components along a central axis  */ class FormLayout implements LayoutManager {   private int left;   private int right;   private int height;   private static final int GAP = 6;      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) {   } }