12
27-4-2015 Tutorial: Registrar la movimiento del mouse y las teclas direccionale s en una tabla (JTable) Norman Salvador Aráuz López -

Tutorial 6- JTable - Movimiento Mouse, Teclas Direccionales

Embed Size (px)

DESCRIPTION

Tutorial 6- JTable - Movimiento Mouse, Teclas Direccionales

Citation preview

Tutorial: Registrar la movimiento del mouse y las teclas direccionales en una tabla (JTable)

Nota: El presente tutorial asume que usted ya sabe cmo crear, agregar controles, formularios etc. a una aplicacin desde cero. Adems est basado en el uso de tablas en Java (Tutorial 4 JTable - Factura) Si usted no maneja estas temticas se recomienda primero realizar los tutoriales anteriores, y practicar continuamente para dominio de la sintaxis.La idea es que cuando el usuario seleccione una fila o navegue por la tabla con las teclas direccionales se obtengan los datos de la fila actualmente seleccionadas. Esto lo haremos haciendo uso de eventos.En este tutorial aprender:1. Registrar el evento con el Mouse: (mouseClicked)2. Registrar la seleccin de las teclas direccionales dentro de la tabla (KeyPressed)Para el siguiente tutorial haremos uso de la factura realizada en el tutorial nmero 4, a la cual le agregaremos unos campos y debe quedar como aparecen en la siguiente figura:

Campos agregados a la factura para este ejemplo

La lista de campos agregados y sus nombres es la siguiente:

ControlNombre

JTextFieldtxtIdSelected

JTextFieldtxtDescripcionSelected

JTextFieldtxtCantidadSelected

JTextFieldtxtPrecioUnitarioSelected

JLabelNo es necesario

JLabelNo es necesario

JLabelNo es necesario

JLabelNo es necesario

Listo, cuando ya tenemos el formulario como aparece en la imagen anterior el siguiente paso ser generar los eventos para registrar lo que seleccione el mouse y otro para registrar lo que seleccionen las teclas direccionales. Para ello a continuacin se detalla cada uno de los procedimientos:1. Registrar el evento con el Mouse: (mouseClicked)Este evento registra el control que el mouse selecciona en el momento que est corriendo la aplicacin, para agregarlo seleccionamos la tabla (que es el control donde deseamos registrar el evento) click derecho->Events->Mouse->mouseClicked

Esta accin generar un mtodo asociado a un evento, lo que aparecer luego de esto es igual a lo que se presenta en la figura siguiente:

Luego agregaremos el siguiente bloque de cdigo:

Estos campos servirn para capturar uno a uno los campos de la fila seleccionada y en dependencia del tipo de dato los iremos almacenando, la siguiente figura muestra uno a uno como capturar cada valor dentro de la tabla:Primero el valor entero:

Podr notar que para obtener un valor de la tabla se utiliza el nombre del modelo interno y la funcin getValueAt(fila, columna), donde le pasamos como nmero de fila la fila seleccionada desde el formulario en la vista de diseo (TablaExterna.getSelectedRow()) y el nmero de columna donde se encuentra el dato, en el caso del id es cero, porque recordemos que los nmeros de columna empiezan de cero. As Id ser en columna cero, Descripcin en columna 1 y as sucesivamente, Luego el campo seleccionado se convierte a string usando el mtodo .toString, el siguiente bloque muestra como capturar cada campo de la fila seleccionada:

Lo siguiente ser tomar estos datos capturados de la tabla y pasarlos a los controles que hemos agregado, de la siguiente manera:

Listo, ahora en cuanto corramos nuestro formulario deberemos agregar al menos dos productos, con las funcionalidades de nuestro botn agregar el cual ya fue probado en el tutorial correspondiente. Y luego seleccionar de la tabla alguna fila de las que hemos agregado:

Seleccionamos dentro de la tabla cualquier fila y observamos que los datos de la fila seleccionados aparecen en los cuadros de texto que hemos agregado

2. Registrar la seleccin de las teclas direccionales dentro de la tabla (KeyPressed)Muy bien, como ya hemos visto es posible ver lo que el usuario selecciona de la tabla, ahora el siguiente paso muestra lo que el usuario selecciona con las teclas direccionales, para ello se har uso de un evento denominado KeyPressed(java.awt.event.KeyEvent evt) el cual recibe como argumento un evento que registra el evento cuando las teclas son presionadas, asignando un cdigo a cada tecla en dependencia de su funcionalidad, en este ejemplo veremos cmo registrar eventos de las teclas direccionales:

Siempre con nuestro formulario de factura, seleccionamos nuestra tabla, damos click derecho->Events->Key->KeyPresed, el cual nos dar como resultado un mtodo para manejar el movimiento de las teclas:

Luego agregamos las mismas variables que fueron creadas en el paso anterior:

Listo, ahora agregamos la sentencia if que nos dir si la tecla direccional ha cambiado de posicin, por lo cual deberemos utilizar el mtodo keyCode() del evento que nos aparece en el parmetro que recibe nuestro mtodo:

La sentencia anterior, evaluar si es presionada la tecla direccional inferior (VK_DOWN), por lo cual se le especfica a la variable evento. Cada tecla posee un cdigo nico el cual se puede pasar a formato carcter, la funcin compara ese cdigo con el cdigo correspondiente a la tecla de abajo. Si esto es cierto se habr detectado el movimiento de la tecla direccional inferior. Las instrucciones que se deben agregar luego de esta de declaracin son las siguientes:Observe que, por cada campo, luego de la sentencia .getSelectedRow() se le agrega + 1, esto es debido a que el evento registra la accin una vez que el foco (seleccin) cambia de valor, por lo cual se debe compensar este retraso. Si no lo agrega, el evento se registrar hasta que usted cambie de fila seleccionada en la tabla, es decir, si selecciona la 1 le mostrar la 2 y viceversa.Ahora, para registrar el evento de la tecla inferior se agrega lo siguiente:

VK_UP es el cdigo correspondiente a la tecla flecha inferior de las teclas direccionales, cuando el evento se dispara este cdigo es activado.

Observe que ahora en lugar de sumar un nmero a la fila seleccionada se le resta, esto es porque se est realizando el proceso contrario es decir, se selecciona la anterior, es decir la de arriba (VK_UP).Luego de estas declaraciones asignamos los valores capturados a los textbox correspondientes, esto lo agregaremos despus del bloque else, siempre dentro del mtodo TablaExternaKeyPresed() el cual estamos digitando actualmente.

Listo, ahora si probamos nuestro formulario veremos que ahora tambin es posible desplazarse en la tabla con las flechas direccionales, y en cuanto desplacemos los valores de la fila seleccionada aparecern en los controles designados para esa tarea: