FormLayoutTester.java Source code

Java tutorial

Introduction

Here is the source code for FormLayoutTester.java

Source

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

}