Java、SWT、FormLayout - 为什么我添加子项的顺序很重要?

标签 java swt form-layout

我正在为复合容器使用 FormLayout。 当我添加两个子项 labelclientArea 时,clientArea 取决于标签 - clientArea 仅在我首先添加标签时出现。

在添加子项后调用容器上的 layout() 没有帮助 - clientArea 不显示。

如何将子项添加到 FormLayout 控制的容器中,使其彼此独立?

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); 此时,labelnull。它没有实例化。所以基本上你将 clientArea 附加到任何东西上。如果你想将clientArea附加到label,ofc你需要先实例化label,然后是clientArea

但是,另一方面,为什么顺序对您很重要?

关于Java、SWT、FormLayout - 为什么我添加子项的顺序很重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12049890/

相关文章:

java - 无限期 hibernate 的守护线程的目的

java - Control类的moveBelow方法有什么作用?

java - 如何编写一种方法来识别以下语言中的单词

java - Java servlet API 中是否有通用的 RequestContext?

java - 我可以使 eclipse SWT UI 看起来像 Eclipse 插件 UI 吗?

Django 脆皮表格、BaseGenericInlineFormSet 和 allow_delete

asp.net - 使用 CSS 在字段集中标记文本对齐

java - 将所有组件设置为 JFrame 的中心

java - 从类对象实例化类

java - Centos 7上使用SWT在图片上绘制文字