Pregunta

Tengo un pequeño marco en el que pido de usuario y contraseña. Este marco se abrirá clic sobre un botón en una ventana principal.

A continuación, tengo dos botones: Aceptar y Cancelar

.

Cuando hago clic en el botón "cancelar", necesito cerrar este marco sin salir de la aplicación.

¿Cómo puedo hacer eso?

¿Fue útil?

Solución

Puede utilizar cualquiera Frame.hide () o Frame.dispose (). También recomendaría mirar en JDialog o JOptionPane

Corrección: ocultar () está en desuso. SetVisible (falso) se debe utilizar en lugar

Otros consejos

Tal vez una forma más limpia se acaba de cambiar el setDefaultCloseOperation de EXIT_ON_CLOSE a DISPOSE_ON_CLOSE:

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

Puede llamar setVisible (falso) en el marco.

También puede ser que desee llamar setDefaultCloseOperation en el marco de pasar en HIDE_ON_CLOSE (información aquí: http://java.sun.com/javase/6/docs/api/javax/swing/JFrame.html#setDefaultCloseOperation%28int%29 ) . Eso evitará que la aplicación de irse si usuario pulsa la "X" en el JFrame para cerrarla.

Uso this.dispose(); en el método detector acción cuando el nombre de usuario / contraseña tiene éxito. por ejemplo:

public void actionPerformed(ActionEvent ae) {

    if(ae.getSource()=="button you press to confirm username/password"){
        if(userNameTf.getText().equals(username)&&isPassword(passwordTf.getPassword())){
            new "window to be opened upon success"
            this.dispose(); // calls dispose on this object ie. 
                                            // the login window 
        }
        else{
            userNameTf.setText("");
            passwordTf.setText("");

            JOptionPane.showMessageDialog(this,
                    "Username and/or password is incorrect!",
                    "Attention!",
                    JOptionPane.WARNING_MESSAGE);
        }
    }

}

Si está usando clases internas para manejar los eventos basta con sustituir 'this.Dispose ()' con Super_Class_Name.this.dispose ();

Asegúrese de que no:

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setVisible método no libera los recursos de memoria y debe ser utilizado solamente cuando el formulario se va a utilizar de nuevo.

La disponer método Libera todos los recursos nativos de pantalla utilizados por esta ventana, sus subcomponentes, y todos sus elementos secundarios que pertenecen. Es decir, serán destruidos los recursos para estos componentes, cualquier memoria que consumen será devuelto al sistema operativo, y ellos serán marcados como no visualizable.

Hacer una función en la clase externa donde se está implementando el JFrame (que necesita para cerrar al pulsar el botón de cancelación).
Escribe this.setVisible(false); en la ejecución de esa función.
Finalmente llamar a esta función en la aplicación ActionListener cuando se quiere cerrarla.

Se puede hacer de muchas maneras, pero estas dos formas es más fácil de usar Uno de 1. escribir this.setVisible(false) en el interior implementado ActionListener
o
2. escribir this.dispose() en el interior implementado ActionListener . Espero que esto le ayudará.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top