4

我有一个 closeWindow() 方法,它使用 dispose() 来关闭当前的 JFrame。当我再次显示窗口时,控件(文本框、列表、表格等)仍然具有它们以前的值,这些值在我 dispose():d 框架时就在那里......这是为什么呢?还有另一种方法可以完全关闭和清除框架吗?

这是另一个 JFrame 用来显示另一个窗口的代码,我在这里做错了吗?

@Action
public void showAddProductToOrderView() {

    if (addProductToOrderView == null) addProductToOrderView = new AddProductToOrderView(this);
    addProductToOrderView.setVisible(true);
}
4

2 回答 2

5

处置窗口不会清除其子文本组件。Dispose 将释放本机资源。java.awt.Window的 javadoc还指出:

通过随后调用 pack 或 show 重建本机资源,可以使 Window 及其子组件再次可显示。重新创建的 Window 及其子组件的状态将与这些对象在 Window 被释放时的状态相同(不考虑这些操作之间的其他修改)。

正如其他人所建议的那样,每次都创建一个新实例。如果这太昂贵了,我相信您最好的选择是在视图变得可见时清除子组件,例如通过覆盖setVisible.

编辑:删除空检查以每次创建一个新框架。

@Action
public void showAddProductToOrderView() {
    addProductToOrderView = new AddProductToOrderView(this);
    addProductToOrderView.setVisible(true);
}

我不知道您的其余代码,是否还有其他取决于被重用的框架。例如,如果您附加了侦听器,请确保它们未注册以免泄漏它们。

于 2010-01-10T13:52:15.490 回答
3

最简单的做法是在再次显示之前重新创建整个框架(使用其构造函数)show()。假设构造函数创建并放置它们,这将为您提供一组全新的组件。

于 2010-01-10T13:39:42.983 回答