Cómo hacer que la tecla Intro (enter) se comporte como tabulador en Java

En algunas ocasiones mientras trabajamos con ventanas en Java es sumamente útil adoptar ciertos comportamientos al presionar las teclas, por ejemplo, que la tecla <<Escape>> cierre la aplicación o que la tecla <<Intro>> (o Enter) haga las veces de tabulador.

Para realizar lo anterior basta implementar un pequeño código en nuestra aplicación de tal manera que, al presionar la tecla que queramos realice el comportamiento que nosotros deseamos, en este caso explicaré cómo hacer que la tecla Enter se comporte como tabulador, es decir, que transmita el foco a los demás objetos de nuestra ventana.

He aquí el código...

KeyStroke enter = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0,false);
        Action accion = new AbstractAction() {   
            public void actionPerformed(ActionEvent e ){ 
                       ui.getFocusOwner().transferFocus();
                }
            }
    };

Ahora la explicación...

  1. Se declara e instancia un objeto Keystroke donde se define (y captura) la tecla que se quiere identificar (por medio de KeyEvent)  con la acción determinada.
  2. Posteriormente se define otro objeto (de la clase Action) con el cual definiremos el comportamiento, al instanciar dicho objeto debemos sobrescribir el método actionPerformed().
  3. Dentro de actionPerformed() definimos el comportamiento, en este caso por medio de ui.getFocusOwner().transferFocus();  donde
    ui = Ventana sobre la que se está trabajando
    getFocusOwner() = obtiene el elemento que posee el foco actualmente
    transferFocus() = pasa el foco al siguiente elemento 'focusable'.

Ahora, si queremos dar un comportamiento especial dependiendo el tipo de elemento que tiene el foco podemos definir dentro de actionPerformed() algo parecido a lo siguiente:

if(ui.getFocusOwner() instanceof JButton){

                    Component boton = ui.getFocusOwner();

                    ((JButton)boton).doClick();              

                }else if(ui.getFocusOwner() instanceof JTextField){

                        ui.getFocusOwner().transferFocus();

                }

En el código anterior simplemente verificamos el tipo de objeto que tiene el foco antes de realizar la acción, si es un botón hacemos la acción definida por el clic sobre el mismo, si es una caja de texto pasamos el foco al siguiente elemento que pueda enfocarse.

 

Alguna duda o algo qué decir? Deja tu comentario. Saludox.

6 comentarios:

  1. ChEkO DeZ dijo...:

    Muy útil, gracias!

  1. Anónimo dijo...:

    Hola, estuve intentando usar este codigo, pero no me funcionaba, me parece porque no habia relacion entre "KeyStroke enter" y "Action accion".

    asi que agregue esto al final y me funciono perfecto.
    getRootPane().registerKeyboardAction(accion,"Enter",enter,javax.swing.JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);

    Saludos. Gracias.
    Torres Ezequiel
    Córdoba Argentina.

  1. Anónimo dijo...:

    Hola he querido hacer lo que se menciona en este blog, soy nuevo programando y me gustaria si no fuera mucha molestia que expusieras un pequeño programa con su programa fuente en cada ejemplo que pongas, creeme y hablo por muchos, nos ayudarias mucho. De antemano muchisimas gracias estare al pendiente del ejemplo de este caso en particular, lo necesito, grax.

  1. ale dijo...:

    hola, a mi pasa algo q no quiero en mi blogspot

    y cada vez q le doy al enter en una entrada con contenido, me tira el cursor al final de todo.
    Como elemino este problema?

  1. Juan dijo...:

    Saludos a todos quienes aportan algo de lo que saben....
    Bueno, al igual que un comentario anterior, me gustaría implementar el código aquí expuesto pero no se donde colocarlo, podrían poner un ejemplo un poco más completo?
    Les agradezco de antemano su colaboración...

  1. Blas Pires dijo...:

    Hola será que pueden decirme donde coloco el código... Gracias!

Publicar un comentario

Este es un espacio abierto, puedes escribir lo que gustes respetando los siguientes puntos:

1.- Lo que escribas esté relacionado con el post, si gustas contactarme puedes hacerlo aqui.

2.- Todo es cuestionable, aunque ten en cuenta que existen formas de hacerlo, evita las agresiones y revisa tu lenguaje antes de publicar un comentario.

3.- Siempre hay tres verdades: tu verdad, mi verdad y la verdad, por lo que opiniones diferentes no necesariamente son equivocadas.

4.- Los comentarios son una forma de discusión abierta, por lo que al publicar uno, implícitamente entras a una discusión, con todo lo que esto representa.

5. Me reservo el derecho de eliminar comentarios que no respeten las condiciones mencionadas anteriormente.

Toma en cuenta que puedes utilizar emoticones en tu comentario, para ver una lista de los disponibles da clic en este enlace.

 
Monillo007 © 2010 | Designed by Trucks, Manual Bookmarking | Elegant Themes