Java: BoxLayout spacing

Fillers - struts, glue, rigid areas, and custom Fillers

Invisible components can be added to a BoxLayout to produce empty space between components. The most useful are struts (or rigid areas). Glue may be insert empty space to fill out a panel.

Strut

   p.add(Box.createVerticalStrut(n));   // n pixels of vertical space.
   p.add(Box.createHorizontalStrut(n)); // n pixels of horizontal space.
When you want to specify space between components use a strut. Create a strut by specifying it's size in pixels, and adding it to the panel at the point you want the space between other components. Important: Use horizontal struts only in horizontal layouts and vertical struts only in vertical layouts, otherwise there will be problems.
p.add(Box.createHorizontalStrut(10));
This creates a strut component 10 pixels wide and adds it to a panel.

Rigid Area

A rigid area is very similar to a strut, but has both vertical and horizontal dimensions, consequently, a rigid area can be used in either horizontal or vertical layouts, altho often they are created with the unused size set to zero. Create a rigid area by specifying it's width and height in pixels in a Dimension object, which has two parameters, an x distance and a y distance. Typically the dimension you are not interested in is set to zero.
p.add(Box.createRigidArea(new Dimension(10, 0)));
This creates a rigid area component 10 pixels wide and 0 pixels high and adds it to a panel. This has the same effect as the horizontal strut defined above.

Glue

   p.add(Box.createVerticalGlue());    // expandable vertical space.
   p.add(Box.createHorizontalGlue());  // expandable horizontal space.
Glue is an invisible component that can expand. It's more like a spring or sponge than glue. Put a glue component where extra space should appear (disappear from) when a window is resized. Use vertical glue in a vertical BoxLayout and horizontal glue in a horizontal layout. Two methods in the Box class create glue. For example, this will allow extra vertical space between two buttons.
JPanel p = new JPanel();
p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
p.add(button1);
p.add(Box.createVerticalGlue()); // this will expand/contract
p.add(button2);
Use the Box.createHorizontalGlue() method for horizontal layouts.

Box.Filler

You can create your own filler by using the Box.Filler constructor and specifying the minimum, preferred, and maximum size. Each size must be in a Dimension object, which has width and height.
Box.Filler myFiller = new Box.Filler(min, pref, max);
For example, to create a new horizontal filler that can get no smaller that 4 pixels, that prefers to be 16 pixels wide, and that will expand to no more than 32 pixels, you could do this:
Box.Filler hFill = new Box.Filler(new Dimension(4,0), 
                                 new Dimension(16, 0), 
                                 new Dimension(32, 0));