com.izforge.izpack.gui
Class FlowLayout

java.lang.Object
  extended by com.izforge.izpack.gui.FlowLayout
All Implemented Interfaces:
java.awt.LayoutManager

public class FlowLayout
extends java.lang.Object
implements java.awt.LayoutManager

A flow layout arranges components in a left-to-right flow, much like lines of text in a paragraph. Flow layouts are typically used to arrange buttons in a panel. It will arrange buttons left to right until no more buttons fit on the same line. Each line is centered.

For example, the following picture shows an applet using the flow layout manager (its default layout manager) to position three buttons:

Graphic of Layout for Three Buttons

Here is the code for this applet:


 import java.awt.*;
 import java.applet.Applet;
 

public class myButtons extends Applet {

Button button1, button2, button3;

public void init() { button1 = new Button("Ok"); button2 = new Button("Open"); button3 = new Button("Close"); add(button1); add(button2); add(button3); } }


A flow layout lets each component assume its natural (preferred) size.

This class is a bit different from java.awt.FlowLayout.

java.awt.FlowLayout has a minor problem that was bugging me when I wrote the UserInputPanel. FlowLayout puts some amount of space in between each component that it lays out. In addition it adds that same amount of space to the left and to the right of the entire group. Therefore items such as the RuleInputfield that are laid out with a FlowLayout would never line up properly with the other components (it would appear to be slightly indented). Because there is no way to circumvent this behavior in FlowLayout (it's hard coded) I copied the source and modified it so that it does not add the space to the left and to the right. Now my stuff lines up properly. (Elmar Grom)

Version:
1.39, 11/29/02
Author:
Arthur van Hoff, Sami Shaio, Elmar Grom

Field Summary
(package private)  int align
          align is the proprty that determines how each row distributes empty space.
static int CENTER
          This value indicates that each row of components should be centered.
(package private)  int hgap
          The flow layout manager allows a seperation of components with gaps.
static int LEADING
          This value indicates that each row of components should be justified to the leading edge of the container's orientation, for example, to the left in left-to-right orientations.
static int LEFT
          This value indicates that each row of components should be left-justified.
(package private)  int newAlign
          newAlign is the property that determines how each row distributes empty space for the Java 2 platform, v1.2 and greater.
static int RIGHT
          This value indicates that each row of components should be right-justified.
static int TRAILING
          This value indicates that each row of components should be justified to the leading edge of the container's orientation, for example, to the right in left-to-right orientations.
(package private)  int vgap
          The flow layout manager allows a seperation of components with gaps.
 
Constructor Summary
FlowLayout()
          Constructs a new Flow Layout with a centered alignment and a default 5-unit horizontal and vertical gap.
FlowLayout(int align)
          Constructs a new Flow Layout with the specified alignment and a default 5-unit horizontal and vertical gap.
FlowLayout(int align, int hgap, int vgap)
          Creates a new flow layout manager with the indicated alignment and the indicated horizontal and vertical gaps.
 
Method Summary
 void addLayoutComponent(java.lang.String name, java.awt.Component comp)
          Adds the specified component to the layout.
 int getAlignment()
          Gets the alignment for this layout.
 int getHgap()
          Gets the horizontal gap between components.
 int getVgap()
          Gets the vertical gap between components.
 void layoutContainer(java.awt.Container target)
          Lays out the container.
 java.awt.Dimension minimumLayoutSize(java.awt.Container target)
          Returns the minimum dimensions needed to layout the components contained in the specified target container.
private  void moveComponents(java.awt.Container target, int x, int y, int width, int height, int rowStart, int rowEnd, boolean ltr)
          Centers the elements in the specified row, if there is any slack.
 java.awt.Dimension preferredLayoutSize(java.awt.Container target)
          Returns the preferred dimensions for this layout given the components in the specified target container.
 void removeLayoutComponent(java.awt.Component comp)
          Removes the specified component from the layout.
 void setAlignment(int align)
          Sets the alignment for this layout.
 void setHgap(int hgap)
          Sets the horizontal gap between components.
 void setVgap(int vgap)
          Sets the vertical gap between components.
 java.lang.String toString()
          Returns a string representation of this FlowLayout object and its values.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

LEFT

public static final int LEFT
This value indicates that each row of components should be left-justified.

See Also:
Constant Field Values

CENTER

public static final int CENTER
This value indicates that each row of components should be centered.

See Also:
Constant Field Values

RIGHT

public static final int RIGHT
This value indicates that each row of components should be right-justified.

See Also:
Constant Field Values

LEADING

public static final int LEADING
This value indicates that each row of components should be justified to the leading edge of the container's orientation, for example, to the left in left-to-right orientations.

Since:
1.2 Package-private pending API change approval
See Also:
Component.getComponentOrientation(), ComponentOrientation, Constant Field Values

TRAILING

public static final int TRAILING
This value indicates that each row of components should be justified to the leading edge of the container's orientation, for example, to the right in left-to-right orientations.

Since:
1.2 Package-private pending API change approval
See Also:
Component.getComponentOrientation(), ComponentOrientation, Constant Field Values

align

int align
align is the proprty that determines how each row distributes empty space. It can be one of the following three values : LEFT RIGHT CENTER

See Also:
getAlignment(), setAlignment(int)

newAlign

int newAlign
newAlign is the property that determines how each row distributes empty space for the Java 2 platform, v1.2 and greater. It can be one of the following three values : LEFT RIGHT CENTER

Since:
1.2
See Also:
getAlignment(), setAlignment(int)

hgap

int hgap
The flow layout manager allows a seperation of components with gaps. The horizontal gap will specify the space between components.

See Also:
getHgap(), setHgap(int)

vgap

int vgap
The flow layout manager allows a seperation of components with gaps. The vertical gap will specify the space between rows.

See Also:
getVgap(), setVgap(int)
Constructor Detail

FlowLayout

public FlowLayout()
Constructs a new Flow Layout with a centered alignment and a default 5-unit horizontal and vertical gap.


FlowLayout

public FlowLayout(int align)
Constructs a new Flow Layout with the specified alignment and a default 5-unit horizontal and vertical gap. The value of the alignment argument must be one of FlowLayout.LEFT, FlowLayout.RIGHT, or FlowLayout.CENTER.

Parameters:
align - the alignment value

FlowLayout

public FlowLayout(int align,
                  int hgap,
                  int vgap)
Creates a new flow layout manager with the indicated alignment and the indicated horizontal and vertical gaps.

The value of the alignment argument must be one of FlowLayout.LEFT, FlowLayout.RIGHT, or FlowLayout.CENTER.

Parameters:
align - the alignment value.
hgap - the horizontal gap between components.
vgap - the vertical gap between components.
Method Detail

getAlignment

public int getAlignment()
Gets the alignment for this layout. Possible values are FlowLayout.LEFT, FlowLayout.RIGHT, or FlowLayout.CENTER.

Returns:
the alignment value for this layout.
See Also:
FlowLayout.setAlignment(int)

setAlignment

public void setAlignment(int align)
Sets the alignment for this layout. Possible values are FlowLayout.LEFT, FlowLayout.RIGHT, and FlowLayout.CENTER.

Parameters:
align - the alignment value.
See Also:
getAlignment()

getHgap

public int getHgap()
Gets the horizontal gap between components.

Returns:
the horizontal gap between components.
See Also:
setHgap(int)

setHgap

public void setHgap(int hgap)
Sets the horizontal gap between components.

Parameters:
hgap - the horizontal gap between components
See Also:
getHgap()

getVgap

public int getVgap()
Gets the vertical gap between components.

Returns:
the vertical gap between components.\
See Also:
setVgap(int)

setVgap

public void setVgap(int vgap)
Sets the vertical gap between components.

Parameters:
vgap - the vertical gap between components
See Also:
getVgap()

addLayoutComponent

public void addLayoutComponent(java.lang.String name,
                               java.awt.Component comp)
Adds the specified component to the layout. Not used by this class.

Specified by:
addLayoutComponent in interface java.awt.LayoutManager
Parameters:
name - the name of the component
comp - the component to be added

removeLayoutComponent

public void removeLayoutComponent(java.awt.Component comp)
Removes the specified component from the layout. Not used by this class.

Specified by:
removeLayoutComponent in interface java.awt.LayoutManager
Parameters:
comp - the component to remove

preferredLayoutSize

public java.awt.Dimension preferredLayoutSize(java.awt.Container target)
Returns the preferred dimensions for this layout given the components in the specified target container.

Specified by:
preferredLayoutSize in interface java.awt.LayoutManager
Parameters:
target - the component which needs to be laid out
Returns:
the preferred dimensions to lay out the subcomponents of the specified container.
See Also:
minimumLayoutSize(Container)

minimumLayoutSize

public java.awt.Dimension minimumLayoutSize(java.awt.Container target)
Returns the minimum dimensions needed to layout the components contained in the specified target container.

Specified by:
minimumLayoutSize in interface java.awt.LayoutManager
Parameters:
target - the component which needs to be laid out
Returns:
the minimum dimensions to lay out the subcomponents of the specified container.
See Also:
preferredLayoutSize(Container)

moveComponents

private void moveComponents(java.awt.Container target,
                            int x,
                            int y,
                            int width,
                            int height,
                            int rowStart,
                            int rowEnd,
                            boolean ltr)
Centers the elements in the specified row, if there is any slack.

Parameters:
target - the component which needs to be moved
x - the x coordinate
y - the y coordinate
width - the width dimensions
height - the height dimensions
rowStart - the beginning of the row
rowEnd - the the ending of the row

layoutContainer

public void layoutContainer(java.awt.Container target)
Lays out the container. This method lets each component take its preferred size by reshaping the components in the target container in order to satisfy the constraints of this FlowLayout object.

Specified by:
layoutContainer in interface java.awt.LayoutManager
Parameters:
target - the specified component being laid out.

toString

public java.lang.String toString()
Returns a string representation of this FlowLayout object and its values.

Overrides:
toString in class java.lang.Object
Returns:
a string representation of this layout.