Heyyyyyyyyyyyyyyy

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

domingo, 27 de septiembre de 2009

Como se usan los objetos de tipo TableItem



Hoy vamos a aprender como se usan los objetos que provienen de la clase TableItem. Con este tipo de objetos se pueden crear rápidamente tablas que consisten de una o más columnas y de uno o más renglones. Cabe mencionar que la clase TableItem es un componente creado por los diseñadores del NetBeans y no es un estándar qué proviene directamente de las clases de Java Micro Edition, esa es la razón del por qué este componente no está en la ayuda estándar de Java.

La figura siguiente muestra como se ve una tabla creada con objetos de tipo TableItem, en un emulador de un celular, con el cursor se puede navegar entre todas y cada una de las celdas de la tabla.




El componente se encuentra en la paleta de componentes. La figura siguiente muestra la ubicación exacta de este componente en el NetBeans, ya se ha visto con otros componentes, para crearlo, basta con arrastrar y soltar en el Form (puedes dar clic en la imagen para verla más grande si lo deseas).
 

Después de arrastrar y soltar en el Form la tabla, se crea el objeto. La figura siguiente muestra el objeto tableItem en el Form y los pasos que siguen para crear la tabla.



(1) Clic en el objeto TableItem, para seleccionar la Tabla
(2) Se debe elegir un modelo de tabla (table Model) usamos la opción que se muestra “ New SimpleTableModel”
(3) Se da clic en el botón indicado en la figura para crear las columnas y renglones de la tabla.

Realizando lo anterior se muestra un nuevo cuadro de dialogo para crear los renglones y columnas de la tabla. La figura siguiente muestra la creación de una tabla de tres columnas por cuatro renglones.




Siguiendo todos los pasos anteriores ya se tiene lista la tabla ahora lo interesante es ver como se pueden enviar datos a ella.

Enviando datos al objeto TableItem

Para enviar datos a la tabla se usa el objeto simpleTableModel y su método setValue, tal y como se muestra en la sentencia siguiente:
simpleTableModel.setValue(columna, renglón, valorString);

columna = Aqui va el número de columna
renglón = aqui va el número de renglón
valorString = Valor que sedesea que aparezca en la tabla debe ser de tipo String
Por ejemplo la siguiente sentencia envía el número 8 a la columna 3 y el renglón 2

simpleTableModel.setValue( 3, 5, “8”);

Se agrega la instrucción siguiente, para repintar en la pantalla del celular y mostar los cambios agregados a la tabla.
simpleTableModel.fireTableModelChanged();

El método fireTableModelChanged() detecta cuando hay un cambio en algún valor de la celda y repinta la tabla para poder observar ese valor o esos valores

Ejemplo
Realizar un segmento de código para la serie armónica vista en el post anterior para un valor de N=10, enviar los valores que se van generando en cada iteración a una tabla de 2 columnas y 10 renglones, la primer columna debe mostrar el valor de la iteración( 0, 1, 2, 3… 10) y la segunda los cálculos que se van generando de la serie armónica.

Solución

La solución a este problema se analizó en el post anterior, aquí se reproduce completamente el código y se adapta para el valor fijo de N=10 
   suma=0;
   for (int i = 1; i<=10; i++) {
     suma = suma + (float) 1/i;               
   }
   stringItem.setText("El resultado de la serie con N=10 es " + suma);

Si se desea mostrar en la tabla, en la columna el valor de la iteración basta con escribir el código siguiente dentro del ciclo de repetición:
simpleTableModel.setValue(0, i-1, ""+i);

La columna es la 0, y el renglón debe iniciar en 0 (por eso el valor de i-1), recuerde que Ia serie empieza en i=1, después simplemente se muestra el valor, ya se había visto esto, la i es entero y para convertirlo a String y poder usarlo en la sentencia, basta con agregar “” + i y listo se convierte a String y se puede usar en la sentencia.

Como la sentencia anterior, estará dentro del ciclo, además se sabe que la i inicia en 1, entonces este código enviará el valor de 0 a la celda (0,0) después el valor de 1 a la celda (0, 1), luego el valor de 2 a la celda (0,2) y así sucesivamente por que la i va cambiando como ya se vio en el post anterior.

De igual forma para mostrar las sumas acumuladas, solo que estas van en la columna 1, la sentencia es la siguiente:

simpleTableModel.setValue(1, i-1, ""+suma);

Al finalizar el ciclo se agrega la instrucción para repintar la tabla con los nuevos valores y listo, el segmento de código con los cambios indicados arriba, se muestra enseguida:

suma=0;
for (int i = 1; i<=10; i++) {
   suma = suma + (float) 1/i;
   simpleTableModel.setValue(0, i-1, ""+i);
   simpleTableModel.setValue(1, i-1, ""+suma);
}
simpleTableModel.fireTableModelChanged();
stringItem.setText("El resultado de la serie con N=10 es " + suma);

La figura siguiente muestra una imagen con un par de pantallas del emulador de teléfonos celulares con la solución de este ejercicio.



El código anterior, lo probe en el celular Sony Ericsson W595 y funciono bien, a excepción de que al presionar el comando para calcular los datos, habia que mover el cursor una vez entre las celdas para actualizarla y ver el resultado.

Si lo desea el lector puede bajar el código completo de este ejemplo, el archivo esta comprimido en formato RAR, da clic aqui para bajarlo. Al descomprimir aparece la carpeta con todos los archivos generados por el NetBeans, cabe mencionar que esta realizado usando la nueva  versión del  NetBeans la 6.7.1


16 comentarios:

  1. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  2. hola estoy intentando crear una aplicación para que me resuelva el método euler.Es mas o menos asi:
    y1=y0+f(x0,y0)*h

    donde "h es una constante" te lo dan al igual que el valor inicial de "y0" ;y "x0" varia dependiendo de h.Ahora el problema es que la función no es la misma y por ende necesito un texdfield donde ingrese la función y me lo lea.

    Un ejemplo de este método es el siguiente para mayor comprensión:

    f(x,y)=x^2+y donde y(0)=2 ,h=0.2, hallar y(1)

    en este caso mi x0=0 siguiendo 5 pasos o iteraciones hasta llegar a 1. osea x0=0,x1=0.2,x2=0.4,x3=0.6,x4=0.8,x5=1
    los pasos me lo indica h osea seria 1/0.2=5pasos.

    si me dieran como dato: y(1)=2 ,h=0.5 hallar y(4) , serian 4/0.5=8 pasos.donde x0=1,x1=1.5,.....x8=4

    Retomando el primer ejemplo de 5 pasos.la secuencia seria lo siguiente:

    y1=y0+h*f(x0,yo)
    y1=2+0.2*(0^2+2)=2.4
    y2=2.4+0.2*(0.2^2+2.4)=2.888
    y3=2.888+0.2*(0.4^2+2.888)=3.4976
    y4=3.4976+0.2*(0.8^2+3.4976)=4.32512
    y5=4.32512+0.2*(1^2+4.32512)=5.390144

    como podrás ver la función cambia y no va hacer la misma en cada ejercicio, osea necesito ingresar aparte de y0,h,x0, la función y que netbeans me lea dicha función para que realice los cálculos. Espero tu ayuda , mi correo es

    henrysmit15@hotmail.com

    , desde ya gracias.

    ResponderEliminar
  3. Hola interesante lo que haces y no sabia de esta clase Table; mi consulta es por lo siguiente; que es más óptimo hacer por cada pantalla una clase ejm. pantallaInicial.java, menu.java; o en una clase hacer un grupo de pantallas o todas las pantallas de la aplicación]?

    ResponderEliminar
  4. Hola, primero powerfull, el siguiente post resuelve parte del ejercicio que muestras en el comentario, esperalo mañana sale sin falta.... kakarato.deb: en cuanto a optimizacion no tengo idea que sea mejor, particularmente me agrada dividir el problema en diferentes clases (archivos.java), para proyectos grandes asi lo hago, proyectos mas pequeños puede ser en la misma clase, asi lo veo yo, pero la verdad nunca me he fijado en cual es mas optimo :(

    saludos

    ResponderEliminar
  5. Hola. Muy interesantes tus clases.
    Deseo crear una aplicación que me permita ingresar una ecuación, por ejemplo cuadrática, cuyos parámetros sean modificados con las flechas. Es decir, que al iniciar la aplicación aparezca:
    "2x^2+3x+1=0" y que me permita navegar entre los coeficientes e incrementar o disminuirlos directamente con las teclas "up", "down", "left" y "right". ¿Podrías decirme cómo hacerlo? Gracias. Gerardo

    ResponderEliminar
  6. Hola excelente el contenido
    estoyh iniciando en el desarrollo aplicaciones para movil
    quiero hacer una apicacion para enviar sms a una lista de contactos me gustaria saber si tienes algun ejemplo que me sirva como guia

    gracias


    David

    ResponderEliminar
  7. hola si no es mucha molestia quisiera que hablaras un poco de el uso de databindings en el netbeans o el uso de rms.

    ResponderEliminar
  8. Hola que crees esos temas son un poco avanzados y pues toda via no los voy a colocar en el blog, lamento no poder ayudarte.

    Doñate

    ResponderEliminar
  9. me puedes decir porfa como mostrar datos de una BD empleando una funcion ArrayList desde un servlet en JSP en un table item...Chvr

    ResponderEliminar
  10. Hola intenté abrir el proyecto "series" con NetBeans IDE 6.8 y sale error y tambien hice un simple hola mundo en la 6.8 y al subirlo a mi cell me dice error de operacion. Tal vez me des una idea de lo que puede estar pasando.

    ResponderEliminar
  11. Es posible agregar mas filas en tiempo de ejecucion?
    Que pasa si se sobrepasa la cantidad de filas definidas?
    Exelente post.
    Gracias por compartir

    ResponderEliminar
  12. Hola¡¡ no tengo idea si se pueda agregar más filas en tiempo de ejecución, la verdad no he probado ni lo otro de sobrepasar la cantidad de filas, no me da tiempo investigar, apenas puedo lentamente agregar articulos al blog, así que lamento nucho no poder ayudarles como ustedes quisieran :(

    ResponderEliminar
  13. Hola amigo!! una pregunta,, Sabes de alguna funcion en java o mejor dicho de alguna clases o libreria que contenga funciones financieras,...

    ResponderEliminar
  14. Hola.... me puedes ayudar en como definir uno el tamaño de la tabla....

    yo pido el tamaño de cuantas filas deseo

    con tabla.setmodel();

    osea si kiero una tabla de 2 columnas con n filas...

    hasta ahi todo me sale bn....

    pero pero no me dejar insertar un valor valores en las celdas....

    osea lo q deseo es q yo mismo puedo definir el tamaño de tabla en tiempo de ejecucion y pueda insertar datos en las celdas....

    ResponderEliminar
  15. Hola , esta muy interesante tu ejemplo de como llenar datos a un TableItem pero lo que a mi me esta aquejando ahorita es como obtener los datos de la tableitem que lleno de mi base de datos. soy nuevo en esto asi que porfas solicito ayuda ..

    Gracias

    ResponderEliminar
  16. Saludos, No lo quiero hacer de forma grafica como lo explican, pero no se cual api descargar para utilizar el TableItem-

    ResponderEliminar