como "matar" un JFrame o regresarlo a su estado inicial??

vareto
02 de Septiembre del 2005
Tengo una aplicación que en un momento dado me gustaria que volviera al estado inicial (posiciones de componentes y demas..), deshacer todos los cambios hechos hasta ese momento me parece mas complicado que "matar" esa instancia y llamar a otra con new...

La cosa es que tiene q ser matar de verdad, no me valdria con setVisible(false) porque tiene sonido y se notaria que aunque haya aparecido la instancia nueva, la vieja sigue por ahi...

chuidiang
02 de Septiembre del 2005
Hola.

Si "ventana" es la variable en la que está tu ventana, para matarla de verdad debes hacer esto

ventana.dispose();
ventana=null;

Si tienes más variables que contienen a tu ventana, también debes apuntarlas a null.

Con esto, el recolector de basura liberará la ventana. Si quieres comprobar que esto es cierto, haz que tu ventana redefina el método finalize() de esta manera

class MiVentana extends JFrame
{
...
protected void finalize()
{
System.out.println ("MiVentana liberada");
}
}

Cuando el recolector de basura la libere, llamará al método finalize() y tú verás en pantalla que efectivamente ha sido liberada.

Un pequeño tema. En versiones más antiguas de java (no sé en las modernas), los JFrame en concreto no eran liberados por el recolector de basura. La excusa de sun es que en una aplicacion sólo debe haber un JFrame que es la ventana principal de la aplicacion y que no se debe liberar. El resto de ventanas secundarias de la aplicación deben ser JDialog.

Se bueno.