Cerrar una Ventana con Java Swing

04/Jun/2010 Java , , , 16 Comentarios

Una vez visto el ejemplo de Hola Mundo con Java Swing vamos a dar paso a realizar más cosas con Java Swing. En este caso, partiendo del ejemplo de Hola Mundo, vamos a ver como podemos cerrar una ventana con Java Swing. De esta manera controlaremos las acciones a realizar una vez que el usuario cierre la ventana.

La idea principal consiste en escuchar el evento windowClosing. El evento windowClosing es un evento del adaptador de ventana o WindowAdapter.

Recuerda que para la gestión de eventos tenemos Interfaces y Adaptadores. Los interfaces nos obligan a codificar todos los eventos a gestionar, mientras que en el Adaptador solo tenemos que gestionar el evento que necesitemos.

Pero lo primero es utilizar el método .addWindowListerner para suscribirnos a los eventos que se produzcan en la ventana. Así, en el constructor de nuestro programa utilizaremos dicho método:

  1. public CerrarVentana(){
  2. addWindowListener(new WindowAdapter() {...});
  3. }

Como podemos comprobar en el código, al método .addWindowListener le estamos pasando una clase WindowAdapter.

El método asociado al cierre de la ventana es windowClosing. En él solo vamos a realizar un exit del sistema con System.exit.

  1. public void windowClosing(WindowEvent e) {
  2. System.exit(0);
  3. }

Así nuestro WindowAdapter quedaría de la siguiente forma para gestionar el cierre de una ventana con Java Swing.

  1. public CerrarVentana(){
  2. addWindowListener(new WindowAdapter() {
  3. public void windowClosing(WindowEvent e) {
  4. System.exit(0);
  5. }
  6. });
  7. }

Aunque nosotros solo hemos forzado un System.exit, en el método windowClosing podemos hacer lo que queramos. Por ejemplo, preguntar al usuario si está seguro de cerrar.

Vídeos sobre Java Swing


Difunde el Conocimiento

Si te ha gustado el artículo o te ha sido de utilidad, no dejes de compartirlo con tus amigos en las redes sociales... Te estaremos muy agradecidos. :-D

16 comentarios en “Cerrar una Ventana con Java Swing”

Víctor Cuervo

Víctor Cuervo

@andres, muchas gracias por compartir tu contenido con nosotros. Se agradece.

Víctor Cuervo

andres

Hola, llegue a este post buscando como cerrar una ventana pero sin terminar la aplicacion, aunque en este post supe como usar el evento de la “X”. Quiero compartir con ustedes el como cerrar la ventana sin terminar la aplicacion, Espero les sirva como a mi 🙂

Víctor Cuervo

Michael

Alguien me podría ayudar, es que estoy haciendo un programa en java netbeans 7.3.1 y estoy usando varios JFrame, pero al momento de yo cerrar uno se me cierran todos los otros, (ME REFIERO DE CERARLO CON LA ‘X’ QUE ESTÁ CON EL MINIZAR, MAXIMIZAR), se que debo cambiar el codigo generado por java, pero no se como alguien me puede ayudar, es urgente, GRACIAS 😀

Víctor Cuervo

Víctor Cuervo

@net55588,

Totalmente de acuerdo. Muy buen apunte. Gracias.

Víctor Cuervo

net55588

this.dispose(); para que no se cierre todo el programa solo el frame sobre el que estamos

Víctor Cuervo

Víctor Cuervo

@javahierro,

El problema en las JSP es que cuando tenemos un modelo de varias JSP no solemos saber por qué página se sale el usuario. Si sabes la página o páginas puedes manejar el evento javascript onunload() – https://developer.mozilla.org/en/DOM/window.onunload

Otra forma es controlarlo por la sesión del usuario. Tienes los métodos getCreationTime y getLastAccessedTime para saber cuándo se creó la sesión y hace cuanto tiempo que un usuario no la utiliza.

El problema en este caso consiste saber cuándo se le cierra la sesión a un usuario (si no la cierras tu automáticamente). Ya que es por inactividad. Que puedes establecerlo vía configuración:

<session-config>
<session-timeout>60</session-timeout>
</session-config>

O vía código session.setMaxInactiveInterval(600);

Espero que te oriente un poco.

Saludos.

Víctor Cuervo

javahierro

Como puedo implementar este codigo en una jsp en donde cuando el usuario cierre el navegador pueda detectar el cierre con este codigo ya que que necesito tomar los datos de fecha-hora de la sesion y cuanto tiempo se estuvo en la sesion. Como puedo implementarlo esto en mi JSP ayudenme porfa

Víctor Cuervo

Enderson

Buen aporte. En el tema este de cerrar ventanas y sus eventos, me pregunto: como hacer para alternar entre ventanas jdialogs? Me explico, en una app con un solo jframe y muchos dialogs uso jbuttons para abrirlos y al tener varios activos y llamo uno estos buscan el foco todos los q estan abiertos y se vienen con el, por q sucede esto? Para llamarlos utilizo btnactionperformed y les agrego sus dimensiones con setSize y setVisible en true respectivo.

Víctor Cuervo

sebastian

SOS LO MAS SE ME SOLUCIONO EL PROBLEMA CON LO DEL MODAL NO TE DAS UNA IDEA DE LO QUE ME ROMPI LA CABEZA PARA SOLUCIONAR ESTO, NO TENIA IDEA DE LO DE MODAL

mil gracias!!!! :D:D:D

Víctor Cuervo

Garusis

mmmm… pues veras… tratare de hacerlo simple… un JDialog modal, es un JDialog que recibe en su contructor la “Ventana” (JFrame, JDialog, etc..) y el parametro “true”… cuando se hace que el JDialog sea modal, el codigo se queda “parado”… osea, no se ejecuta nada, hasta que se haya realizado la accion para la que esta diseñado dicho JDialog… NO es necesario lanzar otro hilo para continuar la ejecucion… aqui puedes encontrar mas info sobre los dialogos modales y otras cosas… y se explica lo necesario… http://chuwiki.chuidiang.org/index.php?title=JOptionPane_y_di%C3%A1logos_modales#JDialog_modal (perdon a @lineadecodigo por citar informacion que no es de su pagina…)

Víctor Cuervo

sebastian

ya me arme el dialog, lo unico q no entendi es
1) como lo hago modal? y que significa maso menos q sea modal?

2) decis q tengo q hacer un hilo aparte cuando muestre el dialog asi no se termina mi aplicacion?

Víctor Cuervo

Garusis

mmmmm… pues, por lo que veo, el problema esta en el dialog que muestras… si quieres que se muestre un dialogo con la opcion de guardar o cancelar puedes hacerlo con un JOptionPane, o si prefieres personalizarlo, puedes diseñar tu propio dialog, heredando de la clase JDialog y hacerlo modal… de cualquiera de las dos formas, te sirve, ya que mientras el JOptionPane o el JDialog modal se este mostrando, el hilo de ejecucion se detiene esperando a que el usuario de una respuesta… si no te quieres complicar, lee un poco hacerca de como usar JOptionPane, ya que es mas sencillo que diseñar tu propio JDialog…

Víctor Cuervo

sebastian

mira te explico mi problema, tengo un frame que es la “pantalla principal” de mi programa. quiero q cuando intente cerrar el frame, me muestre un dialog q le da opciones de guardado de unos archivos. lo q hago a nivel codigo es:
le seteo cuando arranca setdefaultcloseoperation (Do_nothing_on_close), y le agrego un windowhandler q hereda de window adapter, en ese handler le defino el windowClosing, y hago q me muestre el dialog

el problema q tengo es que cuando lo corro y cierro, noto como q ejecuta lo q esta dentro del windowClosing (muestra el dialog) pero desp cierra enotnces el dialog casi ni llega a verse. lo mas FRUSTRANTE es que cuando hago el debug, y me fijo los valores del las propiedades del frame el default close operation lo tiene en 0 (q es el valor de do nothing)…. te juro q si me resolves este problema sos mi idolo

(hice otra aplicacion en la q solo muestro un frame y le seteo lo mismo y ahi me anda….. la unica diferencia es que estoy usando el builder del net beans y como hice una desktop aplication todo me lo envuelve en una clase medio rara (FrameView), no se si sera eso)

Víctor Cuervo

Garusis

@sebastian, si no pones nada en el windowClosing no se cerrara, ya que en el windowClosing debes poner las instrucciones para que el JFrame se cierre, ademas de las otras acciones que quieres que se realizen cuando se intente cerrar el JFrame… por lo tanto, si no pones nada, no se cerrara y no hara absolutamente nada cuando intentes cerrarlo…

si quieres que cuando se intente cerrar la ventana se termine el programa, usa la forma descrita en el post… si quieres que solo se cierre la ventana, sin que se termine el resto del programa, puedes poner dentro del windowClosing, la instruccion:

dispose();

Víctor Cuervo

sebastian

hola tengo el siguiente problema….
si yo al JFrame le pongo con el setdefaultcloseoperation (Do_nothing_on_close),
y le agrego un windowlistener q herede el adapter

sobreescribo el windowClosing, y ahi no hago NADA…. se deberia cerrar si o no?

Víctor Cuervo

Garusis

hu… habia usado por mucho tiempo las interfaces y adaptadores, pero nunca note la diferencia… un detalle al que nunca habia prestado atencion, peor que puede resultar importante…. gracias de nuevo

¿Algo que nos quieras comentar?

Déjanos tu comentario, no te preocupes que tu email no será publicado

*

*