Cómo puedo cerrar una ventana en Java y que aparezca la ventana anterior que la llamó?

publicado por: Anonymous

Una foto vale mas que mil palabras:

introducir la descripción de la imagen aquí

Desde la Ventana principal del programa, si haces clic al botón “Registrar usuario”, la ventana principal se cierra con dispose(); y te abre la Ventana Registrar usuario pero, y para lo contrario?.

Cómo cierro la Ventana Registrar usuario y que aparezca nuevamente la Ventana principal?. Quiero hacer eso porque en la Ventana principal tengo mas botones para otras ventanas con funciones diferentes, a lo mejor el usuario quisiera hacer mas cosas, ademas de registrar un usuario.

Espero puedan ayudarme, nunca había hecho esto en Java.

solución

Primero, da igual que sea Eclipse que cualquier otro IDE, estás preguntando por Java.

Segundo, para solucionar lo que pides, puedes hacer un Manager, para gestionar qué ventanas usas, que es la opción más complicada si no sabes pasar por flujos ágilmente. Para una solución sencilla lo más fácil es que referencies la clase que llama (la ventana principal que pones), hasta la ventana nueva:

  1. Lo puedes hacer en su constructor
  2. Con un método set que establezca el JFrame que abrirá cuando des a un botón
  3. La más bonita si sabes qué se debe abrir al cerrar la otra sería sobreescribiendo el método dispose() de la nueva ventana o creando un método cerrar() que haga lo que quieres y llamarlo desde el botón que cierre la nueva ventana.

Vamos que tienes muchas posibilidades, y más que no he puesto, piénsa en ello y prueba la que más te guste y si tienes algún problema pues haz otra pregunta más concreta.

EDITO PARA AÑADIR SOLUCION 3:

La solución tres sería así:

Dentro de tu código de la Ventana Principal:

//Nuevo método para conseguir el JFrame de la Ventana Principal
private JFrame getFrame(){
    return this;
}

//Botón para hacer el registro
btnRegistrarUsuario.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {

        VentanaRegistro vNueva = new VentanaRegistro(){
            //Con esto cuando llamemos a dispose de vNueva abrimos la principal
            @Override
            public void dispose(){
                //Hacemos visible la principal
                getFrame().setVisible(true);
                //Cerramos vNueva
                super.dispose();
            }
        };

        //Hacemos visible a vNueva
        v.setVisible(true);
        //Cerramos la principal
        dispose();
    }
});

Cuando se vuelva a abrir la principal estará como la dejaste.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *