27 marzo 2006

Ayuda en un JDialog

Cuando queremos que un JDialog procese un evento de teclado, por ejemplo, la F1 para ayuda, tenemos un pequeño problema.

Cuando el JDialog tiene el foco, en realidad lo tiene uno de sus componentes hijos (un JTextField, JButton o el que sea). Si añadimos al JDialog un addKeyListener(), no nos sirve de nada. La tecla F1 la captura el componente interno y no se transmite hasta el JDialog.

Para poder hacerlo, hay que hacer algo tan complejo como esto


Codigo:

((JComponent)dialogo.getContentPane()).registerKeyboardAction(
unKeyListener,
"AYUDA",
KeyStroke.getKeyStroke(KeyEvent.VK_F1 , 0, false),
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );


donde "AYUDA" es cualquier texto y el WHEN_ANCESTOR_OF_FOCUSED_COMPONENT sirve para que se transmita desde el JTextField hasta el JDialog.

1 comentario:

cristhian dijo...

Holas saludos...
Tengo el problema de cerrar un JDialog desde la tecla ESCAPE
e probado el codigo pero donde hay que ponerlo, en el constructor en el addKeyListener....
indiqueme por fabor; muchas gracias