简体   繁体   中英

Java Swing: dispose() a JFrame does not clear its controls

I have a closeWindow() method which uses dispose() for the current JFrame to close down. When I show the window again, the controls (textboxes, lists, tables etc.) still have their previous values in place that were there when I dispose():d the frame... Why is that? Is there another way to completley close and clear a frame?

This is the code that another JFrame uses to show the other window, am I doing something wrong here?

@Action
public void showAddProductToOrderView() {

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

Disposing a window will not clear its child text components. Dispose will release native resources. The javadoc for java.awt.Window also states:

The Window and its subcomponents can be made displayable again by rebuilding the native resources with a subsequent call to pack or show. The states of the recreated Window and its subcomponents will be identical to the states of these objects at the point where the Window was disposed (not accounting for additional modifications between those actions).

As suggested by others, create a new instance each time instead. If that's to expensive I believe your best option is to clear sub components when the view becomes visible, eg by overriding setVisible .

EDIT: Remove the null check to create a new frame each time.

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

I don't know about the rest of your code, if there's something else depending on the frame being reused. For example, if you have attached listeners, ensure they are unregistered to not leak them.

The simplest thing to do would be to re-create the whole frame (using its constructor) before using show() to show it again. That will give you a whole new set of components, assuming that the constructor creates and places them.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM