2012-03-22 41 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