BoxSample.java Source code

Java tutorial

Introduction

Here is the source code for BoxSample.java

Source

/*
Definitive Guide to Swing for Java 2, Second Edition
By John Zukowski       
ISBN: 1-893115-78-X
Publisher: APress
*/

import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.util.Enumeration;
import java.util.Vector;

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class BoxSample {
    public static void main(String args[]) {
        JButton button;
        Vector buttons = new Vector();
        Dimension dim;
        JFrame frame = new JFrame("Box Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        Container contentPane = frame.getContentPane();
        contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.X_AXIS));
        JPanel topLeft = new JPanel();
        topLeft.setLayout(new BoxLayout(topLeft, BoxLayout.X_AXIS));
        topLeft.add(button = new JButton("One"));
        buttons.add(button);
        changeBoth(button);
        topLeft.add(button = new JButton("Two"));
        buttons.add(button);
        changeBoth(button);
        changeWidth(topLeft);
        JPanel bottomLeft = new JPanel();
        bottomLeft.setLayout(new BoxLayout(bottomLeft, BoxLayout.X_AXIS));
        bottomLeft.add(button = new JButton("Six"));
        buttons.add(button);
        changeBoth(button);
        bottomLeft.add(button = new JButton("Seven"));
        buttons.add(button);
        changeBoth(button);
        changeWidth(bottomLeft);
        JPanel left = new JPanel();
        left.setLayout(new BoxLayout(left, BoxLayout.Y_AXIS));
        left.add(topLeft);
        left.add(button = new JButton("Four"));
        buttons.add(button);
        changeBoth(button);
        left.add(bottomLeft);
        changeBoth(left);

        JPanel right = new JPanel();
        right.setLayout(new BoxLayout(right, BoxLayout.Y_AXIS));
        right.add(button = new JButton("Three"));
        buttons.add(button);
        changeWidth(button);
        right.add(button = new JButton("Five"));
        buttons.add(button);
        changeBoth(button);
        changeBoth(right);
        contentPane.add(left);
        contentPane.add(right);
        tweak(buttons);
        frame.pack();
        frame.setVisible(true);
    }

    private static void changeWidth(JComponent comp) {
        comp.setAlignmentX(Component.CENTER_ALIGNMENT);
        comp.setAlignmentY(Component.CENTER_ALIGNMENT);
        Dimension dim = comp.getPreferredSize();
        dim.width = Integer.MAX_VALUE;
        comp.setMaximumSize(dim);
    }

    private static void changeHeight(JComponent comp) {
        comp.setAlignmentX(Component.CENTER_ALIGNMENT);
        comp.setAlignmentY(Component.CENTER_ALIGNMENT);
        Dimension dim = comp.getPreferredSize();
        dim.height = Integer.MAX_VALUE;
        comp.setMaximumSize(dim);
    }

    private static void changeBoth(JComponent comp) {
        comp.setAlignmentX(Component.CENTER_ALIGNMENT);
        comp.setAlignmentY(Component.CENTER_ALIGNMENT);
        Dimension dim = new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE);
        comp.setMaximumSize(dim);
    }

    private static void tweak(Vector buttons) {
        // calc max preferred width
        JButton button;
        Dimension dim;
        int maxWidth = 0;
        Enumeration e = buttons.elements();
        while (e.hasMoreElements()) {
            button = (JButton) e.nextElement();
            dim = button.getPreferredSize();
            if (dim.width > maxWidth)
                maxWidth = dim.width;
        }
        // set max preferred width
        e = buttons.elements();
        while (e.hasMoreElements()) {
            button = (JButton) e.nextElement();
            dim = button.getPreferredSize();
            dim.width = maxWidth;
            button.setPreferredSize(dim);
        }
    }
}