Java Notes
BoxLayout and Boxes
BoxLayout arranges components either horizontally or vertically in a panel. You can control alignment and spacing of the components. Complicated layouts can be made by combining many panels, some with horizontal layout and some with vertical layouts.
Several classes
are typically used:
javax.swing.BoxLayout,
javax.swing.Box, and
javax.swing.Box.Filler.
To Create a JPanel with BoxLayout
Choose either a
horizontal layout (BoxLayout.X_AXIS) or
vertical layout (BoxLayout.Y_AXIS) for a JPanel.
JPanel p = new JPanel();
p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
p.add(some_component);
Unlike other layouts, the panel/container must be passed to the BoxLayout constructor.
Example
The above examples were created with this code, using either X_AXIS or Y_AXIS.
content.setLayout(new BoxLayout(content, BoxLayout.X_AXIS));
content.add(new JButton("Button 1"));
content.add(new JButton("2"));
content.add(new JButton("This is button three"));
The Box class
The Box class was designed to be a simple, and slightly more efficient, substitute for
a JPanel with a BoxLayout.
Because it doesn't support everything that JPanel does
(eg, borders), I recommend using a JPanel with
a BoxLayout rather than Box.
However, the Box class has a number of necessary
methods for working with BoxLayouts.
Because Box is a Container with
BoxLayout, all discussions of spacing and alignment
apply equally well to both JPanels with BoxLayouts and Boxes.
Creating Boxes
You can create the two kinds of boxes with:
import javax.swing.*; . . . Box vb = Box.createVerticalBox(); Box hb = Box.createHorizontalBox();
No Borders on Boxes
Boxes are lighter weight (ie, more efficient) than JPanel, but they don't support Borders. If you need borders, either use a JPanel with BoxLayout, or put the Box into a JPanel with a border.