2012-03-22 19 views
0

在使用java和spring創建的桌面應用程序中,GUI表單被創建爲單例bean,因此無論何時顯示錶單,所有預先輸入的值都在那裏。有沒有比通過java代碼清理每個表單域更好的方式來獲取新表單?在此先感謝當通過彈簧作爲單例bean創建時,清除GUI表單

+0

在GUI應用程序中使用單例bean是否常見?而且,使用springframework來創建GUI應用程序常見嗎?這對我來說似乎有點令人驚訝,因爲GUI和spring似乎不太合適。但也許你想要的是使用原型範圍bean而不是默認的單例作用域。 – Kevin 2012-03-22 15:25:41

+0

是否有原因爲此表單對象選擇了單例作用域? – 2012-03-22 15:29:50

+0

這是我必須使用的一個半途開發的應用程序。有沒有更好的實現方法? – 2012-03-26 13:44:03

回答

0

我重寫dispose方法和super.dispose()後稱爲init方法,在init方法,在加入開始時以下行:getContentPane().removeAll();。 它適合我的要求,當我希望數據保留在表單中時,我只隱藏表單,當我想要一個新表單時,我將處理表單並再次顯示錶單。

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

謝謝,我會嘗試你的第二個sugession。 – 2012-03-29 03:06:42

+0

我想我找到了一個更好的解決方案,但不確定它是否是正確的方法。在'init'方法的'super.dispose()'之後,我重寫了'dispose'方法並調用'init'方法,在開頭添加了以下行:'getContentPane()。removeAll();'。它適用於我的要求,當我希望數據保留在表單中時,我只隱藏表單,並且當我想要一個新表單時,我將表單處理並再次顯示錶單。如果您發現此方法有任何問題,請發表評論。 – 2012-04-04 05:32:03

1

我會建議一個簡單的替代方法,請使用單=假。如果要保留一些初始化片段,請使用init方法或bean後置處理器。

+0

您能否介紹一下init方法和bean後期處理器的用法? – 2012-03-29 03:28:54

+0

這是在這裏回答:http://stackoverflow.com/questions/1088550/spring-how-to-call-a-method-after-bean-initialization-is-complete – questzen 2012-03-29 11:54:42