### FormLayout

FormLayout lays out widgets using an attachment model. A FormAttachment can be defined for each side of a widget and stored in its layout data (FormData). The FormData can be used to designate a requested width and height for the widget, provided that these values do not conflict with the attachment constraints.

A FormAttachment is used to attach a designated side of the widget to the parent Composite or another widget in the layout. You typically do not set attachments on all sides of a widget. It is very common to specify only one horizontal (left or right) attachment and one vertical (top or bottom) attachment and allow the widgets to take the size specified in their FormData, or their preferred size if no size is specified in the FormData.

Attachments can be configured in a variety of ways:

- You can attach the specified side of a widget to a position (percentage value 0-100) in the parent widget. An optional pixel offset can be added.
- You can attach the specified side of a widget to the adjacent side of a target widget inside the composite. An optional pixel offset can be added. The side where the target widget is attached is inferred based upon the side specified in the source widget. For example, attaching the top edge to a widget implies that it is being attached to the bottom edge of the adjacent widget.
- You can attach the specified side of a widget to a particular side of a target widget inside the composite. An optional pixel offset can be added. This can be used, for example, to align the top of a widget with the top of another widget so that they will always line up vertically.
- You can center the widget relative to a target widget. The center need only be specified for one side (left or right, top or bottom) in the direction being centered.

The following table summarizes the attributes of a FormLayout:

Attribute | Description
--- | ---
marginHeight | Specifies the number of pixels of vertical margin that will be placed along the top and bottom edges of the layout.
marginWidth | Specifies the number of pixels of horizontal margin that will be placed along the left and right edges of the layout.

The following table summarizes the attributes of a FormData:

Attribute | Description
--- | ---
top | Specifies the attachment for the top side of the control.
left | Specifies the attachment for the left side of the control.
bottom | Specifies the attachment for the bottom side of the control.
right | Specifies the attachment for the right side of the control.
width | Specifies the preferred width in pixels of the control in the form.
height | Specifies the preferred height in pixels of the control in the form.

The following table summarizes the attributes of a FormAttachment:

Attribute | Description
--- | ---
alignment | Specifies the alignment of the control side that is attached to a control. DEFAULT indicates that the widget should be attached to the adjacent side of the specified control. For top and bottom attachments, TOP, BOTTOM, and CENTER are used to indicate attachment of the specified side of the widget to the specified side of the control. For left and right attachments, LEFT, RIGHT, and CENTER are used to indicate attachment of the specified side of the widget to the specified side of the control. (For example, using TOP indicates that the top side of the attachment's widget should be attached to the top side of the specified control.)
control | Specifies the target control to which the attachment's widget is attached.
denominator | Specifies the denominator of the "a" term in the equation, y=ax+b, which defines the attachment.
numerator | Specifies the numerator of the "a" term in the equation y=ax+b, which defines the attachment.
offset | Specifies the offset in pixels of the control side from the attachment position. Can be positive or negative. This is the "b" term in the equation y=ax+b, which defines the attachment.

See Understanding layouts in SWT for further descriptions and example screen captures using the various attachment styles.