2011-03-23 32 views
1

我有一个JFrame并创建了一个对象来打开它并在我的项目中关闭它。这意味着我只为该JFrame使用一个对象。如何在处理()后在swing中重置字段

当我打电话给dispose()方法来关闭那个帧时,我希望它在下一次setVisible(true)调用中被重置为新的JFrame。但是我仍然可以看到从前面的setVisible(true)电话充值的字段,即使在我关闭它后调用dispose()

如何从该帧刷新存储的值,以便在拨打setVisible(true)时获得新表格?

回答

1

尝试添加WindowListener

frame.addWindowListener(new WindowAdapter() { 
    public void windowClosed(WindowEvent e) { 
     MyJFrame frame = (MyJFrame) e.getSource(); 
     frame.someTextField.setText(""); 
     ... 
    } 
}); 

这不是测试,但应尽量接近让你开始。

+0

谢谢..其实我正在寻找类似于dispose()的任何方法,但如果没有其他方式,然后我必须尝试这些方法。目前我正在使用刚刚告诉我的方法。 – Deepak 2011-03-23 01:21:40

+1

没有任何内置方法会自动执行它,但是可以在调用父类的实现后重写'dispose'或'setVisible'并清除那里的字段如果你宁愿这样做。 – 2011-03-23 01:54:06

1

的Dispose()不重置你的组件,但也可以手动创建新的JFrame:

previous.setVisible(false); 
previous = new JFrame(); 
previous.setVisible(true); 
+0

但我可能需要像这样每天打开1000帧这样的帧。如果我继续创建像这样的新帧会影响性能吗? – Deepak 2011-03-23 00:33:46

+1

表现 - 我不这么认为,但你可以测试它。内存 - 如果您没有任何对旧画面的引用,GC将正确删除它。我的第二个建议是手动清除组件:例如:setText(“”);等等。 – smas 2011-03-23 00:42:27

+0

尽管技术上属实,但它仍然可能会降低性能,因为不能保证GC何时运行。 http://stackoverflow.com/questions/6309407/remove-top-level-container-on-runtime – 2011-11-10 18:00:33