Cerrar JFrame, JDialog tras pulsar ESCAPE

Necesito cerrar un JDialog o un JFrame cuando pulso la tecla ESCAPE, esté donde esté el Foco de control.
Supongo que será con el evento KeyPressed del JDialog o JFrame, pero no me funciona.

1 respuesta

Respuesta
1
La verdad es que estas en lo cierto no se como lo habrás hecho exactamente, pero voy a explicarte los pasos que hay que dar, para que puedas comprobar en que te has equivocado:
1. Usando el método AddKeyListener debes pasarle como parámetro un objeto que implemente el interfaz KeyListener.
2. El interfaz KeyListener declara varios métodos, uno de ellos es KeyPressed, que es invocado cada vez que se pulsa una tecla y el frame tiene el foco de entrada. Este método recibe como parámetro un objeto del tipo KeyPressed. Si invocas al método getKeyCode() de este objeto te devolverá el código de la tecla, en nuestro caso el código que buscamos es VK_ESCAPE.
Ya solo queda que compruebes que el código que devuelve es este y si es este cerrar la ventana con el método dispose del frame.
Debe tener en cuenta que desde el keyListener no tienes acceso al dialogo que lo invoca, por lo que deberá tener un atributo interno que lo referencie, algo como
JFrame frame;
De esta manera lo único que tienes que hacer es frame. Dispose().
Con esto no deberías tener problemas para solucionar tu problema, pero si falla algo ya sabes donde estoy.
Una buena explicación. Más o menos lo había hecho así, el problema es que si tengo el foco de control en un JTextEdit, por ejemplo, el KeyListener que le he añadido al frame no detecta la pulsación de ESCAPE, ya que el foco no le pertenece. Me pregunto si se solucionará el problema registrando un oyente de KeyListener para todos los componentes del Frame, aunque eso es algo muy cutre.
¿Qué opinas?
Atentamente,
Alvaro
Pues si, aunque sea una solución bastante cutre, creo que no te queda más remedio que utilizarla. La única forma que tienes de controlar las teclas que se pulsan es esa.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas