Indebuggeable
Esta mañana he conseguido el bug perfecto, el bug que no se puede depurar. Ayer retomé una de las viejas preguntas de Chuchi, el enfermo de Chuchi (porque está enfermo, con gripe aviar, no porque sea un enfermo), sobre cómo cerrar un formulario Java pulsando la tecla ESC sin necesidad de controlar el evento en todos y cada uno de los controles de la ventana. Tras probar varios códigos, el que más parecía funcionar era el de este hilo del foro de Sun. Una pequeña adaptación y resulta en el siguiente código:
Por cierto, la única solución que he encontrado de momento es sustituir lo marcado en rojo por:
this.addKeyPressedRecursive (this.getComponents()) ; //Esto iría en cualquier parteEsto está muy bien, te cierra el Dialog que has abierto y todo eso. Sólo que se pasa un poco. Cierra absolutamente todo lo que tengas abierto (el Eclipse no, no sé porqué). Pero si lo intentas depurar (debug), funciona bien. Es un bug indebuggeable. Ideal para bugbusters.
private void addKeyPressedRecursive (Component c[]) {
Action escape = new EscapeAction () ;
for (int i = 0 ; i < c.length ; i ++ ) {
if (c [i] instanceof Container) {
addKeyPressedRecursive (((Container) c [i]).getComponents ()) ;
}
((JComponent) c [i]).getInputMap ().put (KeyStroke.getKeyStroke (
KeyEvent.VK_ESCAPE, 0), escape) ;
((JComponent) c [i]).getActionMap ().put (escape, escape) ;
}
}
private class EscapeAction extends AbstractAction {
public void actionPerformed(ActionEvent e) {
((JDialog) this.getRootPane ().getParent ()).dispose () ;
}
}
Por cierto, la única solución que he encontrado de momento es sustituir lo marcado en rojo por:
c[i].addKeyListener(new java.awt.event.KeyAdapter() {De todas formas, Chuchi, al fin encontré una manera menos guarra de controlar la maldita tecla :)
public void keyReleased(java.awt.event.KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ESCAPE)
((JDialog) this.getRootPane ().getParent ()).dispose () ;
}
});
Compártenos:
2 Comentarios:
Ese chals!!!! Eres un monstruo :) Ya mañana voy a currelar que ya estoy mejor.
Si mañana piensas darme otra paliza como la de hoy, por mí vuelve a cogerte la baja... argh!, toda la tarde cargando ordenadores de aquí pá'llá
Publicar un comentario
<< Principal