2016-10-19 13 views
-2

私は、モデルから2つのオブジェクトのビューとコントロールの2つのクラスを持っています。ビュー/コントロールクラスはJPanelです。 これらのオブジェクトの1つはデバイスを保持し、もう1つはこのデバイスの構成を保持します。 構成の表示/制御を担当するクラスを初期化しています。次に、コンストラクタの構成を渡して、デバイスのビュー/コントロールを初期化しています。 構成オブジェクト(構成オブジェクトを保持するJPanelの内部)で構成が変更され、その変更もデバイスオブジェクト内で変更する必要があります。私は、オブジェクトの値ではなく、構成の参照を渡したかったのですが、これはjavaでは不可能です。それに相当するものはありますか?それともリスナーを作る必要がありますか?もしそうなら、それぞれのJPanelの中​​にある設定オブジェクトの変更を聞くのに私は何を使うべきですか?Javaで参照渡しで同等ですか?

編集: これらの変数です:

private viewControl.JConfiguracoesParametros jConfiguracoesParametros1; 
private viewControl.JEnsaiosDeCampo jEnsaiosDeCampo1; 

そして、これは私がそれらを初期化しています方法です:

jConfiguracoesParametros1 = new viewControl.JConfiguracoesParametros(); 
jEnsaiosDeCampo1 = new viewControl.JEnsaiosDeCampo(jConfiguracoesParametros1.getConfig(), jSelecaoAspersor1.getDadosAspersor(), new PerfisRadiais()); 

私は必要なものは、常にConfiguracoesParametros1からの値を持つことjEnsaiosDeCampo1です。 getConfig()。 今のところ、jConfiguracoesParametros1に依存するjEnsaiosDeCampo1から何かを使用しようとすると、すでにコンフィグレーションオブジェクトをjConfiguracoesParametros1内に作成していても、NullPointerExceptionが発生します。

+2

適切なタイプの単一要素配列を渡すことができます。 'void yourMethod(String [] someArrayYouWillUpdate)'です。 –

+0

オブジェクトを渡すことはできず、オブジェクトへの参照のみを渡すことができます。ほとんどの場合、既にあなたが望んでいることをしている可能性が高いので、いくつかのコードを例として提供できますか?オブジェクトへの参照は、参照が指すオブジェクトではなく、値によって渡されます。 –

+1

私はかなりフォローしていません、あなたは設定のインスタンスを望んでいますか?そうであれば、保持されている値を指し示すものの参照を保持することができます(通常はそれらをファイルに保存する設定システムの典型です)。 – Rogue

答えて

0

コードの断片だけで、どのように動作するのかを正確に知ることは難しいです。だから、私の提案は有用ではないかもしれないが、私はみます:

private viewControl.JConfiguracoesParametros jConfiguracoesParametros1 
     = new viewControl.JConfiguracoesParametros(); 
private viewControl.JEnsaiosDeCampo jEnsaiosDeCampo1 
     = new viewControl.JEnsaiosDeCampo(jConfiguracoesParametros1, jSelecaoAspersor1.getDadosAspersor(), new PerfisRadiais()); 

あなたのコードからの変更私は新しいJEnsaiosDeCampoオブジェクトに全体jConfiguracoesParametros1オブジェクトを渡しています(つまり、フィールドトライアルか何かでしょうか?)。このように、JEnsaiosDeCampoオブジェクトは、と同じ構成パラメータオブジェクトへの参照を持ち、後で構成への変更はJEnsaiosDeCampoオブジェクトに表示されます。あなたは

オブジェクトは、実際のJavaのすべてのように値で渡されるとコメントしたときに

率直に言って私はあなたの理解が正しいであったかどうかを疑問にありました。

オブジェクト自体は渡されません。オブジェクトへの参照が(値によって)渡されます。

0

まず、ビューのクラスとあなたが設定を変更したとき、あなたのJPanelが何かは、メソッドによって変更されたコントローラに通知する必要があり

第二に、Javaは常に参照渡しコントローラ用区切られた1つを持っている必要がありますコントローラーのpublic handleConfigChanged(config)のようなものです。そのハンドラはその情報をデバイスに送信し、デバイスをリロードするかどうか尋ねます。

public class Device{ 
    ... 

    public void reloadConfig(config){ 
    ... 
    } 
} 


public class Controller{ 
    ... 

    public boolean handleConfigChanged(config){ 
    ... 
    device.reloadConfig(config); 
    } 
} 

public class View{ 
    ... 
    private void changeConfig(config){ 
    ... 
    controller.handleConfigChanged(config); 
    } 
} 
+0

これは、NetBeans GUIBuilderを使用することではあまり可能ではありません。または、少なくともそれを行う方法はわかりません。しかし、私は将来これを行います(しかし、今のところ私は時間がなく、MVCモデルを適切に実装する方法がわからないため、そのようにしなければなりません)。 – Fuga

+0

Pelo nome das variaveis ja vi falas portugues aconcelho te usaresares IDE jetBrains podes configurar umalicençade estudante; あなたの意見や感想を教えてください: –

+0

あなたは「第2のJavaは常に参照渡し」と言っています。ここには意見の相違があるようです。真実は、Javaは常に価値によって渡され、決して参照ではありません。参照型(実際にはすべてのオブジェクト型)では、オブジェクト自体ではなく、参照が渡されるので、参照渡し( 'char'や' int'のようなプリミティブ型はそれに似ていません。純粋に価値に過ぎない)。 –

関連する問題