Comportamiento de un JFrame

Para variar el comportamiento por defecto de un JFrame en Java existe el método setDefaultCloseOperation que hace que el JFrame se comporte de forma diferente cuando se cierra en función de los distintos valores que se le pueden pasar al método:

  • DO_NOTHING_ON_CLOSE: No hacer nada cuando se cierra la ventana.
  • HIDE_ON_CLOSE: (por defecto) Esconde la ventana cuando el usuario la cierra, pero la deja disponible.
  • DISPOSE_ON_CLOSE: Destruye la ventana cuando se cierra.
  • EXIT_ON_CLOSE: Finaliza la aplicación cuando se cierra la ventana.

En la mayoría de ocasiones con cualquiera de los valores por defecto basta para personalizar el comportamiento de un JFrame, pero hay determinados casos (liberación de recursos, etc …) en los que es necesario un mayor grado de control sobre el comportamiento del JFrame y por ello se debe personalizar manualmente.

Personalizar el comportamiento de un JFrame

Para personalizar el comportamiento de un JFrame mediante programación la solución mas elegante es generar una clase anónima de WindowAdapter, de esta forma solo se deben crear los métodos que controlen los eventos de interés.

Si se opta por el enfoque tradicional y se crea una clase que implemente la interfaz
WindowListener, se deberán crear todos los métodos de la interfaz, dejando los métodos correspondientes a los eventos que no interesen vacíos.

Ejemplo: Manejar el evento de cierre

Este es el caso más típico, se desea que la aplicación pregunte al usuario si está seguro realmente de querer salir del programa cuando este cierre la ventana principal. Para llevar a cabo esto lo primero es poner la siguiente sentencia en el constructor del JFrame:

this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

Esta sentencia lo que hace es que alterar el comportamiento por defecto del JFrame, y que cuando el usuario pulse el botón de cerrar la ventana, al cerrarse no haga nada.

A continuación controlo el evento de cierre de la ventana con una implementación de la clase WindowAdapter, tal y como se muestra a continuación:

this.addWindowListener(new WindowAdapter(){
	@Override
	public void windowClosing(WindowEvent arg0) {
		int result = createYesNoMessage( " Tenga en cuenta que si hay procesos en marcha, la base de datos quedará " + newline + " en estado inconsistente.", "¿Está seguro de que desea abandonar la aplicación?");
		if(result == JOptionPane.YES_OPTION){
			//Llamada a la clase fachada para salvar la configuración o liberar recursos ...
			//facade.saveProperties(); 
			System.exit(0);
		}
	}
				
});

La variable newline de tipo String corresponde al carácter de nueva línea, obtenido tal y como se indica en la entrada: Obtener el carácter de nueva línea en Java

Fuentes:

Acerca de franciscoguemes

Ingeniero en Informática
Esta entrada fue publicada en Swing. Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s