2016-08-23 2 views
1

Eclipse E4でGUIを構築しました。 GUI以外のクラスからGUIに接続する必要があります。ツールコントロールのラベルに接続するにはどうしたらいいですか?あるいはEclipse E4のGUIコンポーネントすべてに接続するにはどうしたらいいですか?Eclipse E4のGUIコンポーネントを入手

私はすでに@injectを見ましたが、成功しませんでした。

は、我々のアプリケーションのザ・GUIは、次のようになります。これを行うには enter image description here

+0

申し訳ありませんが、私ドンあなたが求めていることを理解していない。あなたに何をしようとしているのか正確に例を挙げてください。 –

+0

ステータスバー(ツールコントロールの1つ)にラベルが貼られています。ラベルの募集は視覚的に接続状態(接続、切断)を与えることです。そのラベルを通常のコントローラクラスから変更する必要があります。 – JimmyD

答えて

2

一つの方法は、コントロールの値を設定するためのメソッドを提供マネージャオブジェクトを使用することです。マネージャーオブジェクトをEclipseコンテキストに置くことで、任意のクラスに注入できるようになります(クラスが注入システムによって作成されている場合)。

あなたは1が同じように宣言することで、いくつかの方法で、Eclipseのコンテキストでマネージャークラスを作成することができます

噴射システムがどこに使用されるクラスの単一のインスタンスを作成します
@Creatable 
@Singleton 
public class MyMananger 

注入される。また、OSGiサービスContextFunctionを使用するか、またはIEclipseContext(おそらくLifeCycleクラス内)にオブジェクトを直接設定することもできます。

ツールコントロールコードは、マネージャを挿入して、更新する必要があるコントロールについて通知することができます。

コントロールを更新したい他のコードは、コントロールの値を設定するためのマネージャと呼び出しメソッドを注入できます。

私が言及したように、注入システムによって作られたコードだけが@Injectを使うことができます。 newを使用してクラスを作成する場合は、注入システムを使用していません。代わりにContextInjectionFactory.makeメソッドを使用してください。

マネージャー:ここ

は、私が使用したコードから適応非常に単純な「ステータス行」コードである

@Creatable 
@Singleton 
public final class StatusLineManager 
{ 
    /** Label control to show the status */ 
    private Label _label; 

    public StatusLineManager() 
    { 
    } 

    void setLabel(Label label) 
    { 
    _label = label; 
    } 

    public void setText(String text) 
    { 
    if (_label != null && !_label.isDisposed()) 
     _label.setText(text); 
    } 
} 

ステータスラインツールのコントロール:

public class StatusLineControl 
{ 
    public StatusLineControl() 
    { 
    } 

    @PostConstruct 
    public void postConstruct(Composite parent, StatusLineManager manager) 
    { 
    Composite body = new Composite(parent, SWT.NONE); 

    body.setLayout(GridLayoutFactory.fillDefaults().extendedMargins(10, 0, 4, 0).create()); 

    Label label = new Label(body, SWT.NONE); 

    label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true)); 

    // Tell the manager about the label 

    manager.setLabel(label); 
    } 
} 
+0

これはもう少し私を助けました。次に、マネージャのデータが変更された場合に使用できるアノテーションがあります。 GUIが常にマネージャの最新の値に更新されるようにするには? – JimmyD

+0

私が言ったように、最も簡単なことは、ツールコントロールコードが、マネージャがコントロールを設定できるように、更新する必要があるコントロールについてマネージャに通知することです。代わりに、従来のリスナーを使用するか、 'IEventBroker'イベントを使用します。 –

+0

簡単な例を –

関連する問題