1

Composite コンテナに FormLayout を使用しています。clientArea がラベルに依存する 2つの子labelclientAreaを追加すると、最初にラベルを追加したときに 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);
4

2 に答える 2

5

formData4ClientArea.right = new FormAttachment(label,-5);この時点で、labelですnull。インスタンス化されていません。したがって、基本的には clientArea を何も接続しません。clientAreaにアタッチしたい場合は、最初labelにインスタンス化する必要があります。labelclientArea

しかし一方で、なぜ順番が重要なのでしょうか?

于 2012-08-21T07:20:31.680 に答える
1

実際、コンポーネントをインスタンス化する順序は重要ではありません。

オブジェクトを作成する前にオブジェクトを参照することはできません。Plygnome が述べたように、問題は、 を作成するFormAttachmentと、Labelnull.

プロジェクトでは、最初にすべてのコンポーネントを作成し、次にすべてのレイアウト データ オブジェクトを作成します。

于 2012-08-21T11:41:27.740 に答える