2012-03-22 18 views
0

JavaおよびSpringを使用して作成されたデスクトップアプリケーションでは、GUIフォームはシングルトンBeanとして作成されるため、フォームが表示されるたびに、 Javaコードを介して各フォームフィールドをクリアするよりも新鮮なフォームを取得するより良い方法はありますか?事前に感謝シングルトンBeanとしてSpringを通じて作成されたGUIフォームのクリア

+0

GUIアプリケーションでシングルトンBeanを使用するのが一般的ですか?また、springframeworkを使用してGUIアプリケーションを作成するのは一般的ですか? GUIと春がうまくフィットしないように見えるので、私にとっては驚くべきことです。しかし、おそらくあなたが望むのは、デフォルトのシングルトンスコープではなくプロトタイプスコープBeanを使用することです。 – Kevin

+0

このフォームオブジェクトにシングルトンスコープを選択した理由はありますか? –

+0

これは私が処理しなければならない途中で開発されたアプリケーションです。それを実装するためのより良い方法はありますか? –

答えて

0

私はdisposeメソッドをオーバーライドし、init方法では、super.dispose()initメソッドを呼び出したが、初めに以下の行を追加しました。 私の要求にはうまくいきます。データをフォームに残しておきたい場合はフォームを隠すだけです。新鮮なフォームが必要な場合は、フォームを破棄して再度フォームを表示します。

2

あなたはこの

public class MyForm { 
    // The instance 
    private static MyForm instance = new MyForm(); 
    // Private constructor prevents instantiation from other classes 
    private MyForm() { } 
    // Get the singleton 
    public static MyForm getInstance() { return instance; } 

    // Force a new instance to be created   
    public static void resetInstance() { 
      instance = new MyForm(); 
    } 
} 

のようにインスタンス化される新しいシングルトンを強制することができしかし、これはもう本当にシングルトン動作ではありません、多分あなただけの新しいインスタンス化クラスを使用する必要があります。ような何か:

myPanel.removeAll(); 
myPanel.add(new MyForm()); 

私はシンプルな代替手段を示唆している

+0

ありがとう、私はあなたの2番目の譲歩を試みます。 –

+0

私はよりよい解決策を見つけたと思いますが、それが正しいかどうかはわかりません。 'dispose'メソッドをオーバーライドし、' init'メソッドの 'super.dispose()'の後に 'init'メソッドを呼び出し、始めに次の行を追加しました:' getContentPane()。removeAll(); '。データがフォームに残るようにするには、フォームを非表示にするだけです。新鮮なフォームが必要な場合は、フォームを破棄してフォームを再度表示します。この方法で不具合が見つかった場合は、コメントしてください。 –

1

(コンストラクタはもちろんの公開になるはずです)、= falseのシングルトンを使用してください。初期化スニペットの一部を保持する場合は、initメソッドまたはBeanポストプロセッサを使用します。 getContentPane().removeAll();

+0

initメソッドとBeanポストプロセッサの使い方を教えてください。 –

+0

これはここで答えられます:http://stackoverflow.com/questions/1088550/spring-how-to-call-a-method-after-bean-initialization-is-complete – questzen

関連する問題