Java Notes
FlowLayout
java.awt.FlowLayout
arranges components from left-to-right and top-to-bottom,
centering components horizontally with a five pixel gap between them.
When a container size is changed (eg, when a window is resized),
FlowLayout recomputes new positions for all components subject to these constraints.
Use FlowLayout because it's quick and easy. It's a good first choice when using iterative development. I often start with a FlowLayout in an early iteration then switch to a better layout, if necessary, on a later iteration.
Example
The window above is the default size after packing the FlowLayout. The window on the right shows the same window after it has been resized by dragging the lower-right corner, resulting in components flowing down onto other lines. |
Source code for example
Here is the relevant part of the source code for the above example.
// Note: a real program would add listeners to the buttons. JPanel content = new JPanel(); content.setLayout(new FlowLayout()); content.add(new JButton("Button 1")); content.add(new JButton("2")); content.add(new JButton("This is button three")); content.add(new JButton("four"));
Constructors
Typically the constructor is called in the call to the container's
setLayout
method (see example code).
The parameterless FlowLayout() constructor is probably most common,
but there are some good places to use the alignment.
new FlowLayout() // default is centered with 5 pixel gaps new FlowLayout(int align) new FlowLayout(int align, int hgap, int vgap)
Alignment
align is one of FlowLayout.LEFT, FlowLayout.CENTER (the default), or FlowLayout.RIGHT. You might want to use the RIGHT aligment when building a dialog that puts the OK and Cancel buttons at the lower right.
Spacing
The default spacing is good for most purposes and is rarely changed. hgap is the size in pixels of the horizontal gap (distance) between components, and vgap is the vertical gap.
Typical uses
- Quick implementation. This is the most common use of FlowLayout. You can get something working quickly, and change it, if necessary, in a later iteration.
- Space around component in a BorderLayout. As a subpanel to keep components from expanding. For example, you might want to add a button to the SOUTH part of a BorderLayout, but don't want it to expand to the edges of the SOUTH region. Just put the button in a FlowLayout JPanel and add that to the SOUTH.
- Multiple components in a BorderLayout region. When you want to add several components to a BorderLayout region, drop them into a FlowLayout panel and put that in the BorderLayout.
Problem
FlowLayout
makes components as small as possible,
and does not use their preferred
size. This can show up when you define a JPanel for drawing.
Typically you will set a preferred size, but the panel
may "disappear" in a FlowLayout because it was set to its minimum size (0).