2017-02-23 8 views
1

複数のコントロールを作成するクラスがありますが、クラス自体はコンポジットやウィジェットではありません。コントロールのレイアウトはすべてnew GridLayout(1, false)です。私はクラスレベルGridLayoutを定義でき、すべてのコントロールに使用できるかどうかはわかりません。あなたは、私は3つの同一GridLayoutのインスタンスを作成し、ここで見たようここでのコード例異なるコントロール間でレイアウトインスタンスを共有することは安全ですか

public void createControl(Composite parent) { 
    parent.setLayout(new GridLayout(1, false)); 

    Composite comp1 = new Composite(parent, SWT.NONE); 
    comp1.setLayout(new GridLayout(1, false); 

    Composite comp2 = new Composite(parent, SWT.NONE); 
    comp2.setLayout(new GridLayout(1, false); 

    // ... other stuff 
} 

です。これらのすべてのコントロールにクラスレベルのinsanceを使用できますか?セキュリティ上の問題やパフォーマンスの問題がありますか?

+0

ところで、私は通常、私のコードでGridLayoutやその他のリソースを再利用しています。これまでは問題は発生していませんでした。しかし、共有リソースを変更すると、以前にそれを受け取ったすべてのコントロール/ウィジェットが変更されるとは思わないでください。 –

答えて

1

SWTは実際にはレイアウトオブジェクトを再利用するのが安全かどうかは言わないので、安全ではないと仮定すべきです。

コードGridLayoutの外観からは、それぞれCompositeの新しいレイアウトを使用するにはほとんど費用がかからず、これを試していません。

また、あなたが複数のコンポジットに適用できる標準のレイアウトを定義するためにGridLayoutFactoryを使用することができます。これは、各コントロールのために別々のGridDataオブジェクトが存在しなければならない、GridDataを再利用することは安全ではない間違いある

GridLayoutFactory factory = GridLayoutFactory.swtDefaults(); 

factory.applyTo(comp1); 

factory.applyTo(comp2); 

を。

+0

ありがとう – CMZS

関連する問題