A layout manager that lays out components along a central axis : Custom Layout « Swing « Java Tutorial






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) {
  }

}








14.97.Custom Layout
14.97.1.Custom Layout: DiagonalLayoutCustom Layout: DiagonalLayout
14.97.2.GraphPaperLayout implements LayoutManager2
14.97.3.Circle Layout
14.97.4.This LayoutManager arranges the components into a column. Components are always given their preferred size
14.97.5.Compents are laid out in a circle.
14.97.6.Specialised layout manager for a grid of components.
14.97.7.Stack Layout, uses an orientation to determine if the contents should be arranged horizontally or vertically.
14.97.8.A layout manager that displays a single component in the center of its container.
14.97.9.A simple layoutmanager to overlay all components of a parent.
14.97.10.A layout manager that lays out components along a central axis
14.97.11.Wrapper Layout
14.97.12.Center Layout
14.97.13.DividerLayout is layout that divides two components with the column of actions
14.97.14.X Y Layout