I am using a FormLayout for a Composite container. When I add two children label and clientArea, where the clientArea depends on label - the clientArea only appears, when I add the label first.
Calling layout() on the container, after adding the children doesn't help - the clientArea doesn't show up.
How can I add children to a FormLayout-controlled container, independant from their dependencies from each other?
MyLabel label;
Composite clientArea;
public MyContainer(Composite parent, int style) {
super(parent,style);
//choose the container Layout
FormLayout layout = new FormLayout();
this.setLayout(layout);
clientArea = new Composite(this, SWT.NONE);
FormData formData4ClientArea = new FormData();
formData4ClientArea.left = new FormAttachment(0,0);
formData4ClientArea.top = new FormAttachment(0,5);
formData4ClientArea.right = new FormAttachment(label,-5);
formData4ClientArea.bottom = new FormAttachment(100,-5);
//set the Formdata
clientArea.setLayoutData(formData4ClientArea);
clientArea.setBackground(getDisplay().getSystemColor(SWT.COLOR_GREEN));
//create the label
label = new MyLabel(this, SWT.NONE);
FormData formData4Label = new FormData();
formData4Label.top = new FormAttachment(0,5);
formData4Label.right = new FormAttachment(100,-5);
formData4Label.bottom = new FormAttachment(100,-5);
//set the FormData
label.setLayoutData(formData4Label);
formData4ClientArea.right = new FormAttachment(label,-5);At this point,labelisnull. It is not instantiated. So basically you attach the clientArea to nothing. If you wantclientAreato be attached tolabel, ofc you need to instantiatelabelfirst, thenclientAreaBut,on the other hand, why does the order matter to you?