Instances of this class control the position and size of the children of a composite control by using
FormAttachments
to optionally configure the left, top, right and bottom edges of each child.
The following example code creates a FormLayout
and then sets it into a Shell
:
Display display = new Display (); Shell shell = new Shell(display); FormLayout layout = new FormLayout(); layout.marginWidth = 3; layout.marginHeight = 3; shell.setLayout(layout);
To use a FormLayout
, create a FormData
with FormAttachment
for each child of Composite
. The following example code attaches button1
to the top and left edge of the composite and button2
to the right edge of button1
and the top and right edges of the composite:
FormData data1 = new FormData(); data1.left = new FormAttachment(0, 0); data1.top = new FormAttachment(0, 0); button1.setLayoutData(data1); FormData data2 = new FormData(); data2.left = new FormAttachment(button1); data2.top = new FormAttachment(0, 0); data2.right = new FormAttachment(100, 0); button2.setLayoutData(data2);
Each side of a child control can be attached to a position in the parent composite, or to other controls within the Composite
by creating instances of FormAttachment
and setting them into the top, bottom, left, and right fields of the child's FormData
.
If a side is not given an attachment, it is defined as not being attached to anything, causing the child to remain at its preferred size. If a child is given no attachment on either the left or the right or top or bottom, it is automatically attached to the left and top of the composite respectively. The following code positions button1
and button2
but relies on default attachments:
FormData data2 = new FormData(); data2.left = new FormAttachment(button1); data2.right = new FormAttachment(100, 0); button2.setLayoutData(data2);
IMPORTANT: Do not define circular attachments. For example, do not attach the right edge of button1
to the left edge of button2
and then attach the left edge of button2
to the right edge of button1
. This will over constrain the layout, causing undefined behavior. The algorithm will terminate, but the results are undefined.
@see FormData
@see FormAttachment
@since 2.0