Desarrollo de Aplicaciones móviles con J2ME Parte II
diciembre 29, 2009 at 12:03 am Deja un comentario
En el articulo anterior tratamos los aspectos generales para el iniciarnos en la programación de dispositivos móviles a través de J2ME, este articulo pretende adentranos en unos conceptos un poco mas avanzados, trataremos el uso de varios objectos que vienen en MIDP y CLDC que son de bastante ayuda a la hora de realizar nuestra aplicaciones.
En la figura anterior vemos la jerarquia de objetos de J2ME para la programación de interfaces gráficas, J2ME las clasifica en dos grupos las API de alto nivel con las que podemos agregar a nuestras aplicaciones botones de comando, listas, imagenes, textos, estas API’s son utilizadas para aplicaciones de negocios, el otro grupo son las API’s de bajo nivel utilizadas basicamente para desarrollar juegos (Games) para dispositivos moviles, con estas API’s se controlan las pulsaciones de las teclas del dispositivo, un mayor control de la pantalla.
Iniciaremos viendo las API’s de alto nivel, todas estas implementaciones se encuentran en el paquete javax.microedition.lcdui
Clase Display
Esta clase es el manejador de la pantalla y los dispositivos de entrada, todo MIDlet debe tener al menos un objecto Display, se encargar de mostrar los objectos heredados de Displayed que queramos en la pantalla. De los metodos mas usados de esta clase se encuentran:
void setCurrent(Displayable d) Establece la pantalla actual.
void setCurrent(Alert a, Displayable d) Muestra la alerta a y luego establece la pantalla d como actual.
void setCurrent(Item item) Muestra el objecto item como pantalla actual.
Displayable getCurrent() Devuelve la pantalla actual
boolean vibrate(int duracion) realiza la operación de vibrado del dispositivo un tiempo determinado.
Come he comentado todo MIDlet debe contener al menos un objeto Display, esta declaracion la debemos hacer en el constructor de la clase:
Display pantalla = Display.getDisplay(this)
Una vez se obtiene la referencia al objeto Display que corresponde a la pantalla del dispositivo ya podemos crear cualquier elemento visible, es decir, una instancia de un objeto Displayable, y pasarlo a la pantalla a través del método setCurrent(). Veamos un ejemplo sencillo:
import javax.microedition.midlet.*
import javax.microedition.lcdui.*
public class Ejemplo1 extends MIDlet{
Display pantalla; // se declara aquí para que todos los métodos puedan acceder a ella
public Ejemplo1{ // Constructor
pantalla = Display.getDisplay(this); // Se instancia el objeto Display
}
public startApp{
if (pantalla == null) {
pantalla.setCurrent(Displayable d);
// d debe ser un objeto que derive de la clase Displayable (Form, Text, Alert,List)
}
}
public pauseApp{
…
}
public destroyApp{
…
}
}
Clase Displayable
Esta es una clase abstracta que representa las diferentes pantallas de nuestra aplicación. Como mencionamos cada objeto Display puede tener tantos objetos display como sean necesarios (Form, List, Alert…). Mediante los metodos getCurrent() y setCurrent() se controla que pantalla es visible y accesible.
Otros metodos que implementa esta clase están:
void addCommand(Command cmd): Añade un comando a la pantalla.
void removeCommand(Command cmd): Elimina el comando cmd de la pantalla.
void setCommandListener(CommandListener l): Establece un listener para la captura de eventos.
Una vez conocidas las clases Display y Displayable con las cuales tenemos control de la pantalla del dispositivo pasaremos a conocer los objetos que mostrar en ésta.
Las clases Command y CommandListener
Una de las ventajas que tiene J2ME es el uso de botones de comandos, para agregarlos hacemos uso del objeto Command el cual recibe tres parametros:
1. Etiqueta: Es la cadena de texto que se mostrará en la pantalla del dispositivo
2. Tipo: Indica el tipo de objeto Command que deseamos crear, los tipos que se pueden crear son:
BACK: Petición para regresar a la pantalla anterior
CANCEL: Petición para cancelar el proceso en curso
EXIT: Petición para salir de la aplicación.
HELP: Petición para mostrar información de ayuda.
ITEM: Petición para introducir un Comando en el item de una pantalla
OK: Aceptación de una acción por parte del Usuario.
SCREEN: Acciones de propósito general.
STOP: Petición para parar una operación.
Esta parametro no quiere decir que va a ejecutar la acción que se describe, éste es para que el dispositivo lo identifique y le de la apariencia y posición al comando igual que las demas aplicaciones.
3. Prioridad: Este parametro le indica al dispositivo el orden en que se muestran los comandos en la pantalla del dispositivo.
Para declarar un objeto Command utilizamos:
Command cmdExit = new Command(“Salir”, Command.EXIT,1);
Para agregar un objeto Command en la pantalla utilizamos:
pantalla.addCommand(cmdExit);
Para que nuestro MIDlet escuche peticiones de los comando debemos implementar la clase CommandListener, esto lo hacemos en la declaración de la clase de nuestro MIDlet:
public class Ejemplo1 extends MIDlet implements CommandListener
Una vez implementada la clase CommandListener debemos hacer uso del método CommandAction que es el captura la selección de algún botón en la pantalla:
public void commandAction(Command c, Displayable d)
Donde c es el comando que se seleccionó y d el objeto Displayed donde está el comando seleccionado.
A continuación vamos a ver un ejemplo de la forma de utilizar las objetos Command:
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class Ejemplo2 extends MIDlet implements CommandListener {
// Declaramos los objetos Command aquí para que puedan accederse desde cualquier metodo de la clase.
private Command cmdExit;
private Command cmdHelp;
private Command cmdBack;
private Display display;
public Ejemplo2 () { // Constructor de la clase
display = Display.getDisplay(this); // Obtenemos el dispostivo de la pantalla
}
public void startApp() {
Form formulario = new Form(“Ejemplo2″);
cmdExit = new Command(“Salir”, Command.EXIT, 1); // declaramos los objetos de tipo Command
cmdHelp = new Command(“Ayuda”, Command.HELP, 2);
cmdBack = new Command(“Atras”, Command.BACK, 3);
formulario.append(“Bienvenidos al Blog de Aimer”);
formulario.addCommand(cmdExit); // Agregamos los objetos Command
formulario.addCommand(cmdHelp);
formulario.addCommand(cmdBack);
formulario.setCommandListener(this); // Activa el manejador de eventos de tipo CommandListener
display.setCurrent(formulario);
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
// Metodo de la clase CommandListener
public void commandAction(Command c, Displayable d) {
if (c == cmdExit) {
destroyApp(true);
notifyDestroyed();
}else if (c == cmdHelp) {
Alert mensaje1 = new Alert(“Alerta”,”Has presionado el boton cmdHelp”,null,AlertType.INFO);
display.setCurrent(mensaje1,d); // Muestra un mensaje de pantalla
}else if (c == cmdBack) {
Alert mensaje2 = new Alert(“Alerta”,”Has presionado el boton cmdBack”,null,AlertType.INFO);
display.setCurrent(mensaje2,d); // Muestra un mensaje en pantalla
}
}
}
Espero les sirva de ayuda este articulo. Gracias.
Entrada archivada en:Programación Móvil. Etiquetas:j2me, java, móvil, midle, midp.

Trackback este articulo | Suscríbete a los comentarios vía RSS Feed