Definir la acción por defecto para las teclas ENTER y ESCAPE

2498 vistas

Para la tecla ENTER es sencillo:



java
  1. // - para un JFrame
  2. miFrame.getRootPane().setDefaultButton(miBoton)
  3. // - para un JDialog
  4. miDialog.getRootPane().setDefaultButton(miBoton)



Para la tecla ESCAPE es algo más complicado. Podemos asociar código al evento en lugar de al botón:



java
  1.   private void configureRootPane(JRootPane rootPane) {
  2.     InputMap inputMap = rootPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
  3.     inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "escPressed");
  4.     rootPane.getActionMap().put(
  5.         "escPressed",
  6.         new AbstractAction("escPressed") {
  7.           public void actionPerformed(ActionEvent actionEvent) {
  8.             onKeyEscape();
  9.           }
  10.         });
  11.   }
  12.   ...
  13.   // - para un JFrame
  14.   configureRootPane(miFrame.getRootPane());
  15.   // - para un JDialog
  16.   configureRootPane(miDialog.getRootPane());



El método "configureRootPane" sólo se tiene que llamar una vez, por ejemplo, justo después de instanciar el contenedor. Sólo quedará implementar el método "onKeyEscape", que se disparará desupés de cada pulsación de ESCAPE.