sábado, 12 de marzo de 2011

Breve apunte de programación con Java. Return, Tabs, cursores y otras malas hierbas


Hoy, retomando desde hace mucho, demasiado tiempo, el blog, escribiré un breve apunte sobre el uso de la tecla Return o Enter, así como las flechas del teclado (cursores) para pasar de un campo a otro utilizando Java J2SE (Swing).

Como todos sabemos, la tecla por defecto en entornos gráficos para pasar de un campo al siguiente es la tecla TAB. En ocasiones es mucho más práctico pasar al siguiente campo pulsando la tecla Intro, ya que está junto al teclado numérico y evita tener que desplazar la mano. También resulta casi imprescindible cuando el usuario viene de aplicaciones en las que era el Return la tecla elegida para pasar de campo y la costumbre es de años de utilización.

Para obtener el resultado buscado, en Java tenemos varias alternativas tales como utilizar listeners en las pulsaciones de cada campo y en función de la tecla hacer esto o lo otro... pero Java tiene definidas unas teclas para pasar el campo siguiente o anterior y reescribiendo éstas obtenemos el resultado sin necesidad de escribir más código del necesario.

El código que podríamos insertar en el constructor de la ventana podría ser el siguiente:


Set forwardKeys = this.getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS);
Set newForwardKeys = new HashSet(forwardKeys);
newForwardKeys.add(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0));
newForwardKeys.add(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0));
this.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, newForwardKeys);
Set backwardKeys = this.getFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS);
Set newBackwardKeys = new HashSet(backwardKeys);
newBackwardKeys.add(KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0));
this.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, newBackwardKeys);


Dicha ventana tendría definidas las teclas ENTER y FLECHA ABAJO para siguiente campo y FLECHA ARRIBA para el anterior.

3 comentarios: