BoxLayout

Most layout managers were defined back when Java 1.0 was first released. Swing adds only one new general-purpose layout manager, BoxLayout. This layout manager is useful for creating toolbars or vertical button bars. It lays out components in a single row or column.

Although you can use BoxLayout directly, Swing includes a handy container called Box that takes care of the details for you. Every Box uses BoxLayout, but you don’t really have to worry about it; the Box class includes some very useful methods for laying out components.

You can create a horizontal or vertical box using Box’s static methods.

Container horizontalBox = Box.createHorizontalBox( );
Container verticalBox = Box.createVerticalBox( );

Once the Box is created, you can just add( ) components as usual:

Container box = Box.createHorizontalBox( );
box.add(new JButton("In the"));

Box includes several other static methods that create special invisible components that are handy for BoxLayout. The first of these is glue ; glue is really space between components in the Box. When the Box is resized, glue expands or contracts as more or less space is available. The other special invisible component type is a strut . Like glue, a strut represents space between components, but it doesn’t resize.

The following example creates a horizontal Box (shown in Figure 16.6) that includes both glue and struts. Play around by resizing the window to see the effect of the glue and the struts.

//file: Boxer.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Boxer extends JPanel {
  public static void main(String[] args) {
    JFrame f = new JFrame("Boxer");
    f.addWindowListener(new WindowAdapter( ) {
      public void windowClosing(WindowEvent e) { System.exit(0); }
    });
    f.setSize(250, 250);
    f.setLocation(200, 200);
    Container box = Box.createHorizontalBox( );
    box.add(Box.createHorizontalGlue( ));
    box.add(new JButton("In the"));
    box.add(Box.createHorizontalGlue( ));
    box.add(new JButton("clearing"));
    box.add(Box.createHorizontalStrut(10));
    box.add(new JButton("stands"));
    box.add(Box.createHorizontalStrut(10));
    box.add(new JButton("a"));
    box.add(Box.createHorizontalGlue( ));
    box.add(new JButton("boxer"));
    box.add(Box.createHorizontalGlue( ));
    f.getContentPane( ).add(box, BorderLayout.CENTER);
    f.pack( );
    f.setVisible(true);
  }
}
Using the Box class

Figure 16-6. Using the Box class

Get Learning Java now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.