Heyyyyyyyyyyyyyyy

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

miércoles, 11 de noviembre de 2009

Ejemplo #14 Hola Mundo en modo gráfico



Bueno por fin se va a explicar en este post como se realiza un ejemplo completo usando las interfaces de bajo nivel del celular o también conocido como modo gráfico. Se va a realizar el clásico ejemplo “hola mundo” así que comencemos.

Paso 1. Crear el MIDlet

Este paso ya se analizó, dando clic aquí se puede ver el post, casi al final se indica como crear el MIDlet desde NetBeans, puedes ver el post si no te acuerdas del procedimiento. El resultado de haber realizado este paso es mostrado en la figura siguiente:




Paso #2 Crear la clase que deriva de Canvas
El siguiente paso es crear la clase que hereda de la clase Canvas, este paso también ya se analizo en un post anterior, dando clic aquí puedes acceder a el. También ahí vienen los pasos requeridos para crear la clase llamada HelloCanvas, el resultado de este paso es mostrado en la imagen siguiente:



Paso #3 Agregar el “Hola mundo” a la clase HelloCanvas
El siguiente paso es con la clase HelloCanvas, identificamos el método paint(), y justo en el método drawString, se modifican dos parámetros, uno es el string que se va a dibujar, el “Sample Text” lo modifico por “Hola Mundo, en modo Grafico” y el otro parámetro es el de las coordenadas las que usare son (20, 100) entonces la instrucción queda así:

g.drawString("Hola Mundo en modo Grafico", 50, 100,Graphics.TOP|
Graphics.LEFT);

Paso #4 Crear el objeto de la clase HelloCanvas

Existen dos códigos, dos archivos de java, generados hasta el momento:

• El MIDlet
• La clase HelloCanvas

La pregunta es: ¿como los relaciono? ¿Cómo puedo usar el método paint para que se dibuje el mensaje en la pantalla del celular?, recuerde el celular sigue los métodos que están en el MIDlet, esto significa que el código del MIDlet es el que se ejecuta primero, pero el método de dibujo está en la clase HelloCanvas, si se ve el problema, como puedo desde el MIDlet llamar el método paint.

La solución es sencilla y quizá muchos ya lo saben, recuerde las clases son plantillas para crear objetos, HelloCanvas es una clase, entonces es posible crear un objeto de la clase HelloCanvas y usarlo en la clase MIDlet, déjenme repetirlo, se puede crear un objeto de la clase HelloCanvas y usarlo desde el MIDlet.

Para crear un objeto, primero hay que declararlo, le llamaramos myCanvas, para hacerlo simplemente se coloca el nombre de la clase seguido del nombre del objeto, así:

HelloCanvas miCanvas;

Lo anterior es la declaración, para realmente crearlo se usa el comando new así:
miCanvas = new HelloCanvas();

Después de esa instrucción el objeto llamado miCanvas, está completamente creado y listo para usarse.

Solo falta un detalle, para mostrar cualquier cosa en la pantalla del celular se usa la clase Display, nunca se ha visto en este blog, por que como se recordara NetBenas creaba todo el código incluyendo los objetos de la clase Display, la siguiente instrucción:

Display.getDisplay(this).setCurrent(miCanvas);

Permite dibujar lo que esté en el método paint de la clase Canvas, la clase Display representa el hardware, la pantalla del celular, para acceder a esta pantalla se usa el método getdisplay(this) se usa el this, para indicar que el MIDlet actual es el que se envía como parámetro, finalmente el método setCurrent(HelloCanvas) es usado para indicar que la pantalla actual será la definida por el objeto miCanvas, bueno en resumen el código queda así:

public class Midlet extends MIDlet {
   HelloCanvas miCanvas
   
   public void startApp() {
       miCanvas = new HelloCanvas();
       Display.getDisplay(this).setCurrent(HelloCanvas);
   }
   public void pauseApp() {
   
   }
   public void destroyApp(boolean unconditional) {
   
   }
}

Y listo al ejecutar el código se mostrará en la pantalla el mensaje “hola mundo, en modo gráfico”. Para que quede más claro y lo puedas hacer mucho más fácil se muestra el video tutorial completo para este ejemplo, tal y como se acostumbra en el blog.




En este caso no voy a anexar el código fuente hasta la siguiente entrada, ya que se va a modificar por que el comando exit no funciona como lo puedes ver en el emulador.


11 comentarios:

  1. Gracias, estoy siguiendo tus tutoriales ya que tengo que hacer un pequeño juego para mi clase de java.

    Cuidate ;D

    ResponderEliminar
  2. Hola que bueno que te gusto, solo ruego poquita de paciencia, es el final de semestre y tengo que terminar varios proyectos de tesis, esa es la razon del por que las entradas del blog se han visto mas lentas, paciencia y seguire con los temas saludos desde Irapuato

    Doñate

    ResponderEliminar
  3. Te felicito por tu blog, lo vengo siguiendo hace ya un mes y me a ayudado mucho, estoy trabajando en una empresa de programacion de software como aprendiz y pues mis labores son desarrollar aplicaciones en j2me.
    Como apenas aprendo este blog me ha sido de gran ayuda y he resulto muchas dudas gracias a ti (Donate), Espero que sigamos avanzando (Aunque ya me pidieron ir estudiando conexiones en j2me con la interfaz connect para una aplicacion nueva...).
    Tengo un problema con una simpletablemodel y he buscado por cielo y tierra la solucion y no la encuentro aun, el problema es que cuando lo paso al cel aparece negra y no me muestra absolutamente nada y no se a que se debe....
    Espero que me puedas ayudar con este problema y te lo agradeceria mucho. Espero que sigas poniendo tus articulos y nos sigas ensenando a programar en j2me :)

    SaludOS

    Lozano

    ResponderEliminar
  4. Saludos
    Son muy explicitos sus ejemplos, gracias me estan ayudando de maravilla, aunque si me gustaria saber mas acerca del manejo de sprites y layers para crear un proyecto, una especie de juego que utiliza estructuras de decision dinamicas, y accesa a un servidor para guardar su datos de score, estrategias, en fin la parte de la comunicacion a una base de datos.
    Gracias de antemano.

    Polox :)
    estudiante de Ciencias de la Computacion de la Benemerita Universidad Autonoma de Puebla.

    ResponderEliminar
  5. Estimado Doñate: Nuevamente felicitaciones por tu blog. Deseo hacerte una consulta. En el post del 5 de setiembre mencionaste que la clase Math dispone de las funciones "pow" y "log"; sin embargo, al utilizarlas la compilación me arroja errores. ¿Podrías decirme cómo debo hacer para emplearlas?

    ResponderEliminar
  6. Muchas gracias por las felicitaciones, solo les ruego paciencia es el fin de semestre y estoy asesorando varias tesis que debemos entregar el 3 diciembre, por cierto tres de ellas tienen que ver con la programcion de celulares, luego se las muestro para que vean las aplicaciones que se hicieron... bueno respondo sus preguntas:

    Lozano:

    En cuanto a tu problema no tengo idea por que te aparece negra, quiza viendo y probando el código pero como te decia no tengo el tiempo suficiente asi que lamento no poder ayudarte :(

    Polox:

    Tengo planeado mostrar ejemplos de programación de juegos, y todo eso que mecnionas, pero todo va con mucha calma, necesito ver muchas cosas mas antes de llegar ahi, es que ahorita el blog esta de alguna manera mostrando ejemplos para principiantes después pasaremos a ejemplos más complejos, te ruego paciencia :)

    Gerardo:

    Que crees? me equivoque :(, no es posible usar las funciones "pow" y "log" en el entorno de J2ME esas funciones se pueden usar pero desde J2SE mil disculpas, la documentación de la clase Math desde J2ME indica exactamente que funciones puedo usar, ya la verifique y es imposible usarlas, si las necesitas quizá, se puedan programar...perdon


    Saludos desde Irapuato

    ResponderEliminar
  7. Muchas gracias Doñate por tu respuesta. Sí, necesito utilizar esas funciones y otras que no están en la clase Math. Veré como hago (si soluciono te cuento). Nuevamente mil gracias por tus aportes. Saludos.

    ResponderEliminar
  8. EXCELENTE BLOG AMIGO, ACABO DE ENCONTRARLO Y ES DE LO MEJOR QUE HAY EN LA RED, TE CUENTO QUE ESTOY HACIENDO UN PROYECTO DE DOMOTICA CON UNA APLICACION POR CELULAR,LA IDEA ES ENVIAR UN 1 O UN 0 A UN SERVIDOR Y ASI ENCENDER O A PAGAR APARATOS EELCTRICOS A DISTANCIAS ESTOY EN ESO Y TUS EJEMPLOS ME HAN AYUDADO DE MIL MARAVILLAS

    SALUDOS DESDE CHILE
    ALEXANDER BRAVO

    ResponderEliminar
  9. Saludos desde Colombia. Muy interesante tu blog, hemos aprendido demasiado.

    Una pregunta nosotros estamos realizando una calculadora y lo que queremos es colocar botones (por lo que hemos visto en micro edition no se puede), ya nos entenderas el porque de los botones; si nos puedes ayudar como lograr estos botones escribenos a nestorgiraldov@gmail.com. te agradecería enormemente la ayuda...

    ResponderEliminar
  10. Bueno Donate, te agradesco mucho y pues cuando te desocupes (despues del 3 de dic creo) te estoy escribiendo haber si me puedes ayudar con el problemita este y para que hablemos acerca de eso, que estes muy bien y espero que te valla bien con la tesis esa de grados, espero las aplicaciones esas haber para probar y pues nada que de nuevo gracias por hacer el aprendizaje tan comodo

    ResponderEliminar
  11. hola soy un simple aficionado a la progamacion me son de gran utilidad tus tutos gracias.

    ResponderEliminar