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.