Heyyyyyyyyyyyyyyy

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

jueves, 22 de octubre de 2009

La Clase Canvas



Introducción

La siguiente figura muestra la ya conocida jerarquía de clases de Java Micro Edition. Ahí se ve claramente las clases que se han usado a lo largo de este blog, con las cuales se crean programas con las llamadas interfaces de alto nivel.




Vea la figura, también está la clase Canvas usada para crear las interfaces de bajo nivel, desgraciadamente esta clase se maneja diferente a lo visto hasta ahorita en el blog, la clase Canvas, NO SE PUEDE ARRASTRAR Y SOLTAR, como las clases que crean interfaces de alto nivel vistas en los ejemplos de este blog, el tratamiento es diferente como se ve a continuación, así que comencemos a analizarla.


La clase Canvas

La clase Canvas es usada para crear las interfaces de bajo nivel. Esta clase contiene los mecanismos necesarios para usar la pantalla del celular como una zona de dibujo, se puede dibujar cualquier cosa en la pantalla, esta clase es usada por los desarrolladores de juegos para celulares porque permite tener control total sobre lo que se dibuja en la pantalla del celular, se tiene un control incluso sobre cada punto de la pantalla (por cierto cada punto en la pantalla es llamado pixel).

Con objetos de esta clase se tiene acceso directo a la pantalla del celular la cual tiene una área de dibujo y un área de comandos, como se observa en la figura siguiente:



La clase Canvas fue diseñada por los creadores de Java como una CLASE ABSTRACTA esto según las reglas de la programación orientada a objetos significa que no se pueden crear objetos (o instancias) a partir de ellas.

Recordemos un poquito los conceptos de la programación orientada a objetos, una clase contiene la definición de atributos y métodos que hacen algo, por ejemplo, la clase TextField, que se ha usado en muchos ejemplos, contiene el método que también ya se ha visto muchas veces: getString(). Este método lo que hace es obtener los caracteres que se han ingresado en el TextField, y los asigna a una variable.

Veamos, La clase se llama TextField, uno de sus método se llama getString(), pero recuerde, una clase es una plantilla para crear objetos, entonces para usar el método getString(), Yo necesito un objeto (o instancia) de la clase, el objeto es creado automáticamente por NetBeans, y como se ha visto en los ejemplos Netbeans le asigna el nombre de textField, si hay mas Netbeans les llama textField1, textField2, etc. Estos objetos NetBeans los genera yo no me preocupo por crearlos, yo lo único que hacía era escribir:

textField.getString();
para obtener el texto ingresado en el textField.

Otra vez, la clase se llama TextField, uno de sus métodos se llama getString(), para usarlo se requiere un objeto o instancia llamado textField, pues la clase Canvas no acepta la creación de instancias, entonces yo no puedo hacer uso de sus métodos, por ejemplo la clase Canvas tiene un método llamado paint( ). Este método me permite realizar dibujos en la pantalla del celular, pero no lo puedo usar por que la clase Canvas es abstracta, entonces estamos en un problema, por un lado necesito de la clase Canvas para dibujar en la pantalla, pero por otro lado no puedo usar la clase por que es abstracta. Pero todo se soluciona bien simple, como a continuación se explica.

Creación de clases en java

Para solucionar el problema de las clases abstractas, se crea otra clase por ejemplo una clase llamada miCanvas o el nombre que se desee.

El código para crear una clase en java es bien simple, así:

class miCanvas {


   // aqui van los atributos y métodos de la clase



}

Esa es la sintaxis para crear clases en java: la palabra reservada class, el nombre de la clase y las { }.

Otro ejemplo es:

class HelloCanvas {






}

La clase se llama HelloCanvas, recuerde ese nombre yo se lo asigno como yo lo desee.

Vemos, por un lado se tiene la clase HelloCanvas (o como se llame) y por otro lado se tiene la clase Canvas, obviamente no existe relación alguna entre ellas, son entidades diferentes, para relacionarlas se usa la HERENCIA, la herencia se agrega con la palabra “extends” de la siguiente forma:

class HelloCanvas extends Canvas {




}

Significa que la clase HelloCanvas, hereda todos los métodos y atributos de la clase Canvas, en otras palabras, con la herencia ya puedo usar el método paint() de la clase Canvas, porque ya hay una relación con la clase miCanvas. ¿Me explique?



Recuerde, la clase Canvas no permite crear instancias a partir de ella, pero la clase miCanvas creada por nosotros si permite crear objetos, por que no es abstracta, y como llevan una relación de herencia, puedo usar el método paint() para dibujar en la pantalla cualquier gráfico.

Otra cosa, la clase Canvas es “public” por eso yo puedo agregar la herencia desde la clase miCanvas, por lo que se recomienda que las clases creadas por nosotros sean públicas también, para crearlas públicas simplemente anteponga la palabra “public” así:

public class HelloCanvas extends Canvas {


}


“public” significa que la clase es pública y puede ser usada desde otra clase o desde otro paquete de clases.

Creación de la clase HelloCanvas desde NetBeans

Para crear la clase HelloCanvas desde NetBeans, primero se debe crear un proyecto, déspues se pueden seguir dos opciones similares a las del post anterior:

1. Desde el menú de NetBeans presionar:

                   File> New file…

Al hacerlo aparece el cuadro de dialogo para crear un nuevo archivo, ahí se elije como en la figura siguiente:



2. Otra opción para crear la clase HelloCanvas, es dando clic derecho en el proyecto que se creó y eligiendo New y luego la opción MIDP Canvas, tal y como se observa en la figura siguiente:



Cualquiera de las dos opciones anteriores me lleva a la pantalla siguiente para asignar el nombre a la clase:



Simplemente se da clic en el botón de Finish, para que termine la creación de la clase HelloCanvas, al proyecto se le agrega el archivo llamado HelloCanvas.java, al dar doble clic en el nombre, esté se abre en la pantalla del netBeans apareciendo el código de la clase HelloCanvas como lo muestra la figura siguiente:



Vea el código que genera NetBeans para la clase HelloCanvas, vea la definición de la clase, al iniciar el código se puede ver, es así:
Public class HelloCanvas extends Canvas implements CommandListener {


     // Aquí va el código generado por NetBeans


}

Es exactamente lo que mencionamos arriba más “implements CommandListener”. Esa instrucción permite que el celular detecte los exitCommand, o los okCommand, nunca se había visto esto porque, en los ejemplos realizados NetBeans generaba automáticamente esas instrucciones.

No se va a hablar mucho del “implements” nos llevaría un post completo, ahorita no me interesa los detalles, basta con decir que sirve para detectar los comandos en el celular.

Hasta aqui le vamos a dejar hoy, ya casi se acaba la teoria, nos falta analizar el código que generó NetBeans en la clase HelloCanvas y finalmente enlazar el código del MIDlet con el código de la clase HelloCanvas, para crear el primer programa usando las interfaces de bajo nivel, les ruego paciencia.


3 comentarios:

  1. 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+4=0" y que me permita navegar entre los coeficientes e incrementar o disminuirlos directamente con las teclas "up", "down", "left" y "right". ¿Podrías orientarme? Gracias. Gerardo

    ResponderEliminar
  2. Hola Gerardo, si quieres orientación leete los ejemplos del blog, no esperes a que te hagan el programa que necesitas porque lo llevas claro... el esfuerzo lo tienes que hacer tu, si quieres aprender.
    Un saludo.

    ResponderEliminar
  3. así se dice
    por cierto me podrías ayudar a hacer un graficador de funciones

    ResponderEliminar