Heyyyyyyyyyyyyyyy

Aprende a programar microcontroladores en C... http://tecdigitaldelbajio.com/software-tarjeta.html

miércoles, 7 de octubre de 2009

Objetos TextBox y lectura de datos desde un objeto TableItem



Las dos entradas anteriores del blog muestran como se envía información hacia objetos TableItem, hoy se aprenderá como editar un valor dentro de la tabla y luego leerlo para finalmente hacer algo con esos valores.

 Por ejemplo si se desea realizar un programa que calcule el promedio de 5 calificaciones, pues para realizar este ejemplo es necesario conocer las calificaciones, para después sumarlas y finalmente obtener el promedio, bueno pues esas calificaciones pueden ser capturadas en una tabla.


Bueno esto que aprenderemos hoy es otra opción para capturar datos aparte de un TextField, yo les dejo el ejemplo, ustedes piensen en sus aplicaciones igual y en alguna pueden usar esta técnica de ingresar datos. El ejemplo es muy didáctico: obtener el promedio de cinco calificaciones, pero pues ojala les sirva en algún programa que hagan.

Antes de analizar el ejemplo veamos de nueva cuenta en la imagen la jerarquía de clases de Java Micro Edition, se ven sombreadas algunas clases con las que ya se ha trabajado. Pero hay otras que no se han visto, hay una clase que se llama TextBox, hoy vamos a usarla también.


Vea la clase TextBox, esta al mismo nivel que la clase List  y que la clase Form.


La clase TextBox

Los objetos de esta clase me permiten capturar información desde el teclado del celular, en otras palabras funciona igualito que un TextField, que ya se ha visto infinidad de veces. Solo que el Textfield muestra un solo cuadrito de texto para capturar y el TextBox es una pantalla del celular completa, donde se pueden capturar múltiples líneas de texto.

El primer paso para trabajar con él, es agregarlo a la pantalla de flujo de NetBeans, la figura siguiente muestra la ubicación exacta de un TextBox y como se agrega a la vista de flujo.


Ya se mencionó, un TextBox está al mismo nivel que un Form, así que es posible agregar comandos en el, para que el TexBox pueda ejecutar código de java. Por ejemplo puedo agregar un Okcommand para que desde el Form se puede mostrar el TextBox, e igual para el TextBox, puedo agregar un OkCommand para que se regrese al Form, la siguiente imagen muestra esta conexión.


Así puedo navegar entre el Form y el TextBox, esto se usará un poco más adelante.

Para enviar datos al TextBox se usa el mismo método que el de un TextField, se usa el método setText, un ejemplo puede ser el siguiente:

textBox.setText(“ Grupo de Sistemas Digitales, ITESI”);

Recuerde, al arrastrar y soltar el TextBox en la pantalla de flujo NetBeans agrega el nombre textBox a la instancia, si hubiera otra NetBeans agrega textBox1 al siguiente objeto.

Por otro lado, para leer el dato que se ha ingresado en el TextBox se usa el método getString(), está es la sentencia completa para capturar todo el texto que haya en el TextBox:

textBox.getString();

Editar datos al TableItem

Antes que podamos aprender a leer los datos de una tabla y procesarlos,  primero la tabla tiene que tener valores, para escribir los valores, se mueve el cursor hasta seleccionar la celda deseada, por ejemplo la figura siguiente muestra la celda 2 (columna = 0, renglón 1) seleccionada.



Claro que la tabla y su modelo (simpleTableModel) son agregados al Form previamente, así como el okCommand. Por cierto, el okCommand que me lleva al TextBox, se le puso la etiqueta “Editar Celda”, puesto que eso es precisamente lo que se hará, editar la celda para colocarle un valor en ella.

Al dar clic en “Editar Celda”, se muestra el TextBox, es justo ahí cuando se captura el valor deseado por el usuario. La figura siguiente muestra una pantalla cuando se introduce el valor de 90 en la celda desde el TextBox.


Vea la figura, El TextBox también tiene un okCommand, al que se le puso la etiqueta de “Guardar Dato”, al dar clic debe guardar el dato en la tabla, para hacerlo se requiere código.

Primero se debe conocer, cual celda estaba seleccionada previamente, esto se hace con los métodos getSelectedCellRow( ) y con getSelectCellColumn( ), el primer método me indica cual renglón se ha seleccionado y el segundo cual columna. Entonces el par de instrucciones que almacenan la columna y el renglón son las siguientes:

          columna = tableItem.getSelectedCellColumn();

renglon  = tableItem.getSelectedCellRow();

Previamente las variables columna y renglón se declaran como enteros.

Después se obtiene el valor del textField y se envía a la tabla con el método setValue():

simpleTableModel.setValue(columna, renglón, textBox.getString());

         simpleTableModel.fireTableModelChanged();

La primera instrucción, coloca el valor del TextBox, en la columna y el renglón especificados por sus respectivas variables, y la segunda instrucción repinta la tabla para mostrar que valores se han almacenado.

Repitiendo el proceso anterior es posible llenar de datos cada una de las celdas así como se observa en la figura siguiente:



Y qué tal si se desea manipular esos datos, por ejemplo como se menciono en la parte de arriba, para obtener su promedio. ¿qué hago?

Como Leer datos de Un TableItem

Primero que nada se le agrega otro okCommand que es el que va a procesar los datos. Para el simple caso de sacar un promedio de 5 datos, pues simplemente se crea un ciclo for como el siguiente:

 

for (i = 0; i < 5; i++) {                    

 

 

}

 

Al observar la documentación de la clase TableItem, se puede ver un método llamado getValue(column, row), que regresa el valor de la celda especificada por las variables column y row, así la instrucción:

 

valor = simpleTableModel.getValue(0,0);

 

Asigna a la variable “valor” lo que este almacenado en la celda cuya columna es la 0 y cuyo renglón es el 0.

 

Entonces si se está dentro de un ciclo for y en nuestro caso hay una sola columna (la 0) se puede recorrer cada uno de los valores con la sentencia siguiente:

 

valor = simpleTableModel.getValue(0, i);

 

La documentación es muy clara y dice que la variable valor debe ser declarada de tipo Object, y usando un método llamado toString() se puede cambiar el valor capturado a cadena de caracteres, el código completo para sacar los valores de la tabla y calcular su promedio es el siguiente:

               // Declaración de variables

               float prom;                       

                int suma=0, i;

                String val;

                Object valor; 

                for (i = 0; i < 5; i++) {                    

                     valor = simpleTableModel.getValue(0,i); // obtiene el valor de la tabla

                     val = valor.toString();  // se convierte a String

                     suma = suma + Integer.parseInt(val); //se convierte a entero y se acumula la suma

                }

                prom = suma / 5; // aquí se obtiene el promedio

                simpleTableModel.setValue(0,6,"" + prom);        // aquí se envía el resultado a la celda 6 para mostrar el promedio.

                simpleTableModel.fireTableModelChanged();

 

Bueno les dejo el código por si necesitan analizarlo, esta creado para la versión 6.7.1 de NetBeans y comprimido en formato RAR, dar clic aqui para bajarlo.            



6 comentarios:

  1. hola que tal amigo me parece muy interesante tu blog ya que un dia andava de curioso viendo como hacer aplicaciones para celulares y fue por este blog que ya soy capas de hacer algunas con facilidad por mis conocimientos en c. solo queria preguntar si podrias poner un ejemplo de manejo de archivos. quisiera aprender a guardar datos en mi celular, por ejemplo si quisiera hacer una aplicacion para que saque los promedios de las materias que llevo en la escuela y despues poder consultarlos.

    ResponderEliminar
  2. Hola que bueno que te gusto el blog, lo que me pides si esta planeado pero, para mucho más adelante, si te fijas estamos introduciendo la sintaxis de Java, ahorita vamos en el ciclo for, siguen los otros ciclos (while, do-while), arreglos de una y dos dimensiones, funciones, más de la programación orientada a objetos, la programación de gráficos etc... el ejemplo que me indicas si está en planes, pero un poquitín más adelante, te ruego mucha paciencia.

    saludos desde Irapuato
    Doñate

    ResponderEliminar
  3. Oye una pregunta... cuando realizas una entrada de datos en un Textfield, ¿puedes hacer que sea un nùmero por default?... osea al apretar el 6 no me aparezca M, N, O... si no el numero directo...
    Como para realizar una calculadora.

    ResponderEliminar
  4. Hola, Si es posible que se elija un número por defaul, primero seleccionas el TextField, luego te vas a la ventana de sus propiedades, identificas una propidedad que dice "Input Constraint", ahi le das clic para elegir un tipo de entrada, al hacerlo aparece un cuadro de dialogo, elijes Numeric y listo asunto arreglado

    Saludos

    ResponderEliminar
  5. Hola, esta muy bueno esto!!
    pero puedo leer un archivo .txt usando este textbox?

    ResponderEliminar
  6. ola que tal me parece interesante este blog , podrias decirme como se puede agregar componentes
    en tiempo de ejecucion en este caso un TableItem estoy pensando hacer una aplicacion q resuelva ecuaciones con n incognitas....gracias

    ResponderEliminar