Академический Документы
Профессиональный Документы
Культура Документы
UNIDAD V
Interfaz Grfica de Usuario
J2ME: Aplicaciones Java para Dispositivos Mviles
Mster en JAVA
Indice
5.1. MIDLets y Displays
5.2. Diagrama de Estados de un MIDlet
5.3. Controles de alto nivel
5.4. Gestin de la interfaz a bajo nivel
5.5. Imgenes
5.6. Creacin y ejecucin de aplicaciones MIDP
5.7. Definicin del proceso de desarrollo de MIDP
5.8. Construccin de una aplicacin MIDP (MIDlet)
Introduccin
Descripcin
Retrasa la ejecucin del mtodo run() del objeto r para
no interferir con los eventos de usuario.
Provoca un efecto de flash en la pantalla.
Devuelve el mejor alto de imagen para un tipo dado.
Devuelve el mejor ancho de imagen para un tipo dado.
Devuelve el estilo de borde actual.
Devuelve un color basado en el parmetro pasado.
Devuelve la pantalla actual.
Devuelve una referencia a la pantalla del MIDlet m.
Devuelve true o false si la pantalla es de color o b/n.
Devuelve el nmero de niveles alpha soportados.
Devuelve el nmero de colores aceptados por el MID.
Establece la pantalla d despues de la alerta a
Todo MIDlet debe poseer al menos una instancia del objeto Display. Para
obtenerla emplearemos el siguiente cdigo:
Display pantalla = Display.getDisplay(this)
En la especificacin MIDP 1.0 esta clase contena cuatro mtodos que le permitan
definir y obtener el ttulo y el ticker: setTitle(String s), getTitle(), setTicker(Ticket ticker) y
getTicker(). El ticker es una cadena de texto que se desplaza por la pantalla de derecha a
izquierda. En la especificacin MIDP 2.0 que es la ms reciente en este momento, estos
cuatro mtodos han sido incluidos en la clase Displayable.
La clase Alert
public class Alert extends Screen
Descripcin
Aviso de una peticin previa
Indica la aceptacin de una accin
Indica que ha ocurrido un error
Indica algn tipo de informacin
Indica que puede ocurrir algn proble
Es posible ejecutar el sonido sin tener que crear un objeto Alert, invocando al
mtodo playSound(Display) de la clase AlertType, por ejemplo:
AlertType.CONFIRMATION.playSound(display)
En el siguiente ejemplo vamos a ver los dos tipos de alerta: modal y no modal.
Vamos a crear un objeto Form donde insertaremos dos comandos. Cada uno de ellos
activar una pantalla de alerta.
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class EjemploAlerta extends MIDlet implements CommandListener
{
Alert alerta1,alerta2;
Command salir, aler1, aler2;
Displayable temp;
Display pantalla;
Form pantallainicial;
public EjemploAlerta()
{
// Obtengo la referencia a la pantalla del MIDlet
pantalla = Display.getDisplay(this);
// Creo los objetos que forman las pantallas del MIDlet
salir = new Command("Salir",Command.EXIT,1);
La clase List
public class List extends Screen implements Choice
La clase List nos va a permitir construir pantallas que poseen una lista de
opciones. Esto nos ser muy til para crear mens de manera independiente. La clase
List implementa la interfaz Choice y esto nos va a dar la posibilidad de crear 3 tipos
distintos de listas cuyo tipo estn definidos en esta interfaz.
Existen dos constructores que nos permiten construir listas: el primero de ellos nos
crea una lista vaca y el segundo nos proporciona una lista con un conjunto inicial de
opciones y de imgenes asociadas si queremos:
List(String titulo, int listType)
List(String titulo, int listType, String[] elementos, Image[] imagenes)
Tipo
EXCLUSIVE
IMPLICIT
MULTIPLE
Descripcin
Lista en la que un slo elemento puede ser seleccionado a la vez.
Lista en la que la seleccin de un elemento provoca un evento.
Lista en la que cualquier nmero de elementos pueden ser
seleccionados al mismo tiempo.
Hay que tener en cuenta que el array de elementos y de imgenes tiene que tener
el mismo nmero de componentes.
Veamos los distintos tipos de listas y como se produce la seleccin de opciones en
cada una de ellas
Listas implcitas
Como hemos dicho, en este tipo de listas cuando seleccionamos un elemento
provocamos una accin. ste mecanismo nos va a ser muy til para crear el clsico men
de opciones. La accin a ejecutar cundo seleccionemos una opcin la tenemos que
implementar en el mtodo commandAction(Command c, Displayable d) Vamos a ver un
ejemplo de cmo crear una lista implcita y as veremos su comportamiento de una
manera ms clara:
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class ListaImplicita extends MIDlet implements CommandListener
{
Command atras, salir; //Declaracion de Variables
Display pantalla;
List menu;
Form formu1, formu2, formu3;
public ListaImplicita()
{
pantalla = Display.getDisplay(this); //Creacion de pantallas
menu = new List("Men",List.IMPLICIT);
10
En este ejemplo hemos creado una lista con el constructor simple y luego le
hemos ido aadiendo opciones a travs del mtodo insert(int posicin, String opcion,
Image imagen). En este caso la insercin la hemos hecho siempre en la primera posicin,
por esta razn hemos ido insertando las opciones de la ltima a la primera.
Listas exclusivas
En este tipo de listas slo podemos seleccionar un elemento a la vez. La seleccin
de uno de ellos implica la deseleccin del resto. La implementacin en el dispositivo de
este tipo de listas se realiza a travs de Radio Buttons. En este caso, al contrario que
11
ocurre con las listas implcitas, la seleccin de una opcin no provoca ningn tipo de
evento, por lo que es necesario incluir un Command para salvar el estado del men de
opciones y ver cul de stas ha sido seleccionada. El siguiente ejemplo nos va a servir
para ver el comportamiento de este tipo de listas.
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class ListaExclusiva extends MIDlet implements CommandListener
{
Display pantalla;
Command salir, salvar;
List menu;
public ListaExclusiva()
{
pantalla = Display.getDisplay(this);
salir = new Command("Salir",Command.EXIT,1);
salvar = new Command("Salvar",Command.ITEM,1);
String opciones[] = {"Opcion1","Opcion2","Opcion3"};
menu = new List("Lista exclusiva",List.EXCLUSIVE,opciones,null);
menu.addCommand(salvar);
menu.addCommand(salir);
menu.setCommandListener(this);
}
public void startApp()
{
pantalla.setCurrent(menu);
}
public void pauseApp()
{
}
public void destroyApp(boolean unconditional)
{
}
public void commandAction(Command c, Displayable d)
{
if (c == salvar)
{
int opcionelegida = menu.getSelectedIndex();
//salvar opciones en memoria persistente.
System.out.println("Opcion elegida n"+(opcionelegida+1));
}
else
{
destroyApp(false);
notifyDestroyed();
}
}
}
12
Listas mltiples
En estas listas podemos seleccionar los elementos que queramos al mismo
tiempo. Como las listas exclusivas tambin es necesario incluir un Command para salvar
el contexto.
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class ListaMultiple extends MIDlet implements CommandListener
{
Display pantalla;
List menu;
Command salir, salvar;
public ListaMultiple()
{
pantalla = Display.getDisplay(this);
salir = new Command("Salir",Command.EXIT,1);
salvar = new Command("Salvar",Command.ITEM,1);
menu = new List("Lista Multiple",List.MULTIPLE);
menu.insert(menu.size(),"Opcion1",null);
menu.insert(menu.size(),"Opcion2",null);
menu.insert(menu.size(),"Opcion3",null);
menu.addCommand(salir);
menu.addCommand(salvar);
menu.setCommandListener(this);
}
public void startApp()
{
pantalla.setCurrent(menu);
}
public void pauseApp()
{
}
public void destroyApp(boolean unconditional)
{
}
public void commandAction(Command c, Displayable d)
{
if (c == salvar)
{
boolean seleccionados[] = new boolean[menu.size()];
menu.getSelectedFlags(seleccionados);
for(int i = 0;i<menu.size();i++)
{
System.out.println(menu.getString(i) +
(seleccionados[i] ? " seleccionada" : " no seleccionada"));
}
}
else
{
destroyApp(false);
notifyDestroyed();
}
}
}
13
En este caso hemos vuelto a utilizar el constructor simple de la clase List. Esta vez
hemos ido aadiendo las opciones del men al final, haciendo uso del mtodo size(), de
sta manera podemos aadir los elementos en el orden correcto. Como podemos ver, el
Command Salvar es el que determina que opciones tenemos seleccionadas.
Mtodos
int append(String texto,Image imagen)
int getSelectedIndex()
boolean isSelected(int pos)
void removeCommand(Command cmd)
void set(int pos, String texto, Image im)
void setFitPolicy(int modo)
Descripcin
Aade un elemento al final de la lista
Obtiene el ndice del elemento seleccionado.
Determina si est seleccionado el elemento
Elimina el Command cmd.
Reemplaza el elemento de la posicin pos
Establece el modo de posicionar las entradas de
la lista por pantalla.
La clase TextBox
public class TextBox extends Screen
Una TextBox es una pantalla que nos permite editar texto en ella. Cuando creamos
una TextBox, tenemos que especificar su capacidad, es decir, el nmero de caracteres
14
que queremos que albergue cmo mximo. Esta capacidad puede ser mayor que la que
el dispositivo puede mostrar a la vez. En este caso, la implementacin proporciona un
mecanismo de scroll que permite visualizar todo el texto. Hemos de tener en cuenta que
la capacidad devuelta por la llamada al constructor de clase puede ser distinta a la que
habamos solicitado. De cualquier forma, el mtodo getMaxSize() devuelve la capacidad
mxima que permite un TextBox ya creado. Podemos tambin poner restricciones al texto
que se puede incluir en una TextBox. Estas restricciones se encuentran en la clase
TextField, ntimamente relacionada con Textbox como veremos ms adelante.
Valor
ANY
CONSTRAINT_MASK
EMAILADDR
NUMERIC
PASSWORD
PHONENUMBER
URL
Descripcin
Permite la insercin de cualquier carcter.
Se usa cundo necesitamos determinar el valor actual de las
restricciones
Permite caracteres vlidos para direcciones de correo
electrnico.
Permite slo nmeros.
Oculta los caracteres introducidos mediante una mscara
para proporcionar privacidad.
Permite caracteres vlidos slo para nmeros de telfono
Permite caracteres vlidos slo para direcciones URL.
Restricciones de entrada de caracteres
Descripcin
Borra caracteres del TextBox.
Devuelve la posicin del cursor en pantalla.
Copia el contenido del TextBox en datos.
Devuelve las restricciones de entrada.
Devuelve el tamao mximo del TextBox.
Devuelve el contenido del TextBox.
Inserta un subrango de caracteres de datos en el TextBox.
15
La clase Form
public class Form extends Screen
Descripcin
Aade una imagen al formulario.
Aade un Item al formulario.
int getWidth()
void insert(int num, Item item)
void set(int num, Item item)
Void
setItemStateListener(ItemStateListener
listener)
int size()
16
Manejo de Eventos
El manejo de eventos de un formulario se hace de manera muy similar al de los
Commands. Es necesario implementar la interfaz ItemStateListener que contiene un solo
mtodo abstracto itemStateChanged(Item item). Cuando realizamos algn tipo de accin
en un Item de un formulario, ejecutamos el cdigo asociado a ese Item que definamos en
el mtodo itemStateChanged(Item item) de igual forma que hacamos con el mtodo
commandAction(Command c, Displayable d) cuando manejamos Commands.
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class ManejoItems extends MIDlet implements ItemStateListener,
CommandListener{
Display pantalla;
Form formulario;
TextField txt;
Command salir;
public ManejoItems(){
pantalla = Display.getDisplay(this);
formulario = new Form("");
txt = new TextField("Introduce datos","",70,TextField.ANY);
salir = new Command("Salir",Command.EXIT,1);
formulario.append(txt);
formulario.addCommand(salir);
formulario.setItemStateListener(this);
formulario.setCommandListener(this);
}
public void startApp() {
pantalla.setCurrent(formulario);
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
public void commandAction(Command c, Displayable d){
if (c == salir){
destroyApp(false);
notifyDestroyed();
}
}
public void itemStateChanged(Item i){
if (i == txt){
System.out.println("Evento detectado en el TextBox");
}
}
}
En este ejemplo hemos insertado un objeto TextField que deriva de la clase Item, y
cada vez que insertamos texto en el TextField mostramos un mensaje por la consola de
salida en la que informamos que se ha producido un evento. Adems de TextField los
Item que podemos insertar en un formulario son: StringItem, ImageItem, DateField,
ChoiceGroup y Gauge. Todos ellos los veremos a continuacin.
17
La Clase StringItem
public class StringItem extends Item
donde:
etiqueta es la etiqueta del Item.
texto es el texto que contiene el Item
apariencia es la apariencia del
Item.BUTTON.
texto:
Item.PLAIN,
Item.HYPERLINK,
Descripcin
Nos devuelve la apariencia del texto
Nos devuelve la Fuente del texto
Nos devuelve el texto del StringItem
Establece la Fuente del texto.
Establece el texto del StringItem
La clase ImageItem
public class ImageItem extends Item
Descripcin
Imagen posicionada a la izquierda
Imagen posicionada a la derecha
Imagen centrada
Posicin por defecto
Imagen posicionada tras un salto de lnea
Imagen posicionada antes de un salto de lnea
Descripcin
Nos devuelve la cadena de texto alternativa.
Nos devuelve la apariencia
Nos devuelve la imagen
Nos devuelve el posicionado de la imagen
Establece un texto alternativo
Establece una nueva imagen
Establece un nuevo posicionado en pantalla
La clase TextField
public class TextField extends Item
19
Descripcin
Borra caracteres del TextField.
Devuelve la posicin del cursor en pantalla.
Copia el contenido del TextField en datos.
Devuelve las restricciones de entrada.
Devuelve el tamao mximo del TextField.
Devuelve el contenido del TextField.
Inserta un subrango de caracteres de datos en el
TextField.
Inserta la cadena de caracteres datos en una posicin
determinada.
La clase DateField
public class DateField extends Item
El siguiente cdigo nos muestra como crear un componente DateField que, a partir
de la hora actual nos permita insertar la fecha y hora que deseemos. El aspecto del objeto
DateField depende del dispositivo MID dnde lo ejecutemos, aunque suele ser muy
vistoso:
Date fechaactual = new Date(); // Creo un objeto Date con fecha actual
DateField fecha = new DateField(Fecha,DateField.DATE_TIME);
fecha.setDate(fechaactual); // Establezco en el objeto la fecha actual
La clase ChoiceGroup
public class ChoiceGroup extends Item implements Choice
21
Descripcin
Aade un elemento al final de la lista
Elimina el elemento de la posicin especificada
Elimina todas las entradas de la lista.
Inserta un elemento en la posicin especificada
Devuelve el modo en el que se muestran las entradas de la
lista por pantala
Devuelve la fuente del elemento pos.
Obtiene la imagen de una posicin determinada.
Almacena el estado de seleccin en un array.
Obtiene el ndice del elemento seleccionado.
Obtiene el texto del elemento indicado por pos.
Determina si est seleccionado el elemento
Reemplaza el elemento de la posicin pos
Establece el modo de posicionar las entradas de la lista por
pantalla.
Establece la fuente de la entrada indicada en pos
Reemplaza el estado de seleccin por el de array
Reemplaza el estado de seleccin
Obtiene el nmero de elementos
La clase Gauge
public class Gauge extends Item
22
23
24
En la primera parte de este punto veremos los mecanismos que proporciona la clase
Canvas para manejar los eventos de bajo nivel, lo que nos permitir detectar pulsaciones
de teclas o eventos del puntero (si el MID posee este mecanismo).
Posteriormente estudiaremos el funcionamiento del mtodo paint() y de la clase Graphics
lo que nos permitir manejar grficos en nuestras aplicaciones.
Eventos de bajo nivel
Los eventos dentro de la clase Canvas podemos manejarlos principalmente de dos
formas distintas:
A travs de Commands como hemos visto en el ejemplo anterior. Este sistema es
el que hemos utilizado hasta el momento, por lo que su funcionamiento es
sobradamente conocido.
A travs de cdigos de teclas. Este mtodo es el que Canvas proporciona para
detectar eventos de bajo nivel. Estos cdigos son valores numricos que estn
asociados a las diferentes teclas de un MID. Estos cdigos se corresponden con
las teclas de un teclado convencional de un telfono mvil (0-9,*,#). La clase
Canvas proporciona estos cdigos a travs de constantes que tienen asociados
valores enteros (Tabla 5.16).
25
Valor
48
49
50
51
52
53
54
55
56
57
42
35
Con estos cdigos anteriores ya podemos conocer cual es la tecla que ha pulsado el
usuario. Canvas, adems proporciona unos mtodos que permitirn manejar estos
eventos con facilidad. La implementacin de estos mtodos es vaca, por lo que es misin
nuestra implementar los que necesitemos en nuestra aplicacin de acuerdo con el
propsito de sta.
Mtodos
boolean hasRepeatEvents()
String getKeyName(int codigo)
Descripcin
Indica si el MID es capaz de detectar la repeticin
de teclas
Devuelve una cadena de texto con el nombre del
cdigo de tecla asociado
El perfil MIDP nos permite detectar eventos producidos por dispositivos equipados
con algn tipo de puntero como un ratn o una pantalla tctil. Para ello, nos proporciona
un conjunto de mtodos cuya implementacin es vaca.
Mtodos
void pointerDragged()
void pointerPressed()
Descripcin
Invocado cuando arrastramos el puntero
Invocado cuando hacemos un click
void pointerReleased()
Al igual que hacamos con los eventos de teclado, es nuestro deber implementar
estos mtodos si queremos que nuestro MIDlet detecte este tipo de eventos. Para saber
si el dispositivo MID est equipado con algn tipo de puntero podemos hacer uso de los
mtodos de la la siguiente tabla.
Mtodos
boolean hasPointerEvents()
Descripcin
Devuelve true si el dispositivo posee algn puntero
26
El mtodo paint()
La clase Canvas posee un mtodo abstracto paint(Graphics g) que se ocupa de
dibujar el contenido de la pantalla. Para ello, se usa un objeto de la clase Graphics que es
el que contiene las herramientas grficas necesarias y que se pasa como parmetro al
mtodo paint(). Cuando vayamos a implementar este mtodo tendremos que tener en
cuenta lo siguiente:
El mtodo paint() nunca debe ser llamado desde el programa. El gestor de
aplicaciones es el que se encarga de realizar la llamada a ste mtodo cuando sea
necesario.
Cuando deseemos que se redibuje la pantalla actual debido a alguna accin en
concreto del usuario o como parte de alguna animacin, deberemos realizar una
llamada al mtodo repaint(). Al igual que ocurre con los eventos de teclado, la
peticin se encolar y ser servida cuando retornen todas las peticiones anteriores
a ella.
La implementacin del MID no se encarga de limpiar la pantalla antes de cada
llamada al mtodo paint(). Por esta razn, ste mtodo debe pintar cada pixel de la
pantalla para, de esta forma, evitar que se vean porciones no deseadas de
pantallas anteriores.
Hemos dicho que el gestor de aplicaciones se encarga de invocar al mtodo
paint() cuando sea necesario. Esta llamada la realiza normalmente cuando se pone la
pantalla Canvas como pantalla activa a travs del mtodo de la clase Display
setCurrent(Canvas) o despus de invocar al mtodo showNotify(). Hemos de tener en
cuenta que una pantalla Canvas no posee la capacidad por s misma de restaurar su
estado en caso de que el AMS interrumpa la ejecucin normal de la aplicacin para, por
ejemplo, avisar de una llamada entrante. Para resolver este inconveniente, Canvas nos
proporciona dos mtodos cuya implementacin es vaca: hideNotify() y showNotify().
El primero de ellos es llamado justo antes de interrumpir a la aplicacin y borrar la
pantalla actual. En l podramos incluir el cdigo necesario para salvar el estado actual de
la pantalla, variables, etc, y as posteriormente poder restaurar correctamente la
aplicacin. El mtodo showNotify() es invocado por el gestor de aplicaciones justo antes
de devolver ste el control a la aplicacin. En l podemos insertar el cdigo necesario
para restaurar correctamente la pantalla de la aplicacin.
La clase Graphics
public class Graphics
dibujar en una pantalla Canvas. Un objeto Graphics lo podemos obtener slo de dos
maneras:
Dentro del mtodo paint() de la clase Canvas. Aqu podemos usar el objeto
Graphics para pintar en la pantalla del dispositivo.
A travs de una imagen usando el siguiente cdigo:
Image imgtemp = Image.createImage(ancho,alto);
Graphics g = imgtemp.getGraphics();
28
29
Publicacin
Durante esta fase se proceder a la comparticin de los ficheros generados en el
punto anterior en un servidor accesible a los clientes.
Descarga
Una vez publicada, se inicia la fase de descarga, en la que los usuarios proceden
a descargar la aplicacin del servidor. Para ello existen distintas formas, como la conexin
directa mediante un cable USB, WIFI o infrarrojos; pero la ms comn es la OTA, en la
que se descarga desde un servidor remoto. En todos los casos, se requieren realizar los
siguientes pasos:
Bsqueda de la aplicacin: Aqu existen diferentes alternativas, como la descarga
desde un navegador WAP, o la utilizacin de alguna aplicacin residente en el
dispositivo con tal propsito (denominadas Discovery Application).
Descarga y verificacin del descriptor: Tras seleccionar la aplicacin, se
procede a la descarga y verificacin del descriptor (JAD), que tiene como objetivo
asegurarnos que el entorno de ejecucin es correcto.
Descarga del MIDlet Suite: Una vez verificado el descriptor, se inicia la descarga
del MIDlet Suite (JAR).
Instalacin: En esta fase, el dispositivo comprueba el manifiesto de la aplicacin,
as como la seguridad y caractersticas del dispositivo y aplicacin, con el fin de
asegurar su seguridad. Tras ello, se instala la aplicacin en el terminal.
Ejecucin: Esta fase se inicia cuando el usuario selecciona la aplicacin en su
terminal e inicia su ejecucin. El dispositivo se encarga de invocar la aplicacin en
una mquina virtual, y comenzar su ejecucin asignndole un estado Activo.
Otros posibles estados para las aplicaciones MIDP son Pausado y Destruido.
Actualizacin: Si se han publicado nuevas versiones de la aplicacin, el
dispositivo deber gestionar dichas versiones, procediendo a la instalacin de la
nueva de acuerdo a sus procedimientos.
Borrado: El dispositivo gestionar tanto el borrado de la aplicacin MIDlet
instalada, como todos los registros de memoria permanente utilizados por el
mismo.
5.7. Definicin del proceso de desarrollo de MIDP
Las aplicaciones MIDP (MIDlets) siguen un proceso desde que son ideadas
hasta que estn instaladas y ejecutndose en los dispositivos. Dicho proceso es el
siguiente:
Escritura.
Compilacin y preverificacin.
Prueba y correccin.
Empaquetado.
Prueba del paquete.
31
Escritura de la aplicacin
Hay algunas reglas para el desarrollo de MIDlets, adems de las establecidas
por el lenguaje, que deben ser consideradas:
Toda MIDlet debe importar
javax.microedition.lcdui.*.
los paquetes
javax.microedition.midlet.*
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
-javax.microedition.midlet.*. Define que se utilizar MIDP.
-javax.microedition.lcdui.*. Proporciona las apis de interfaz de usuario.
Cada MIDlet debe extender la clase MIDlet.
public class FirstMIDlet extends MIDlet {
Una MIDlet no debe tener ningn mtodo public static void main(), contrario a lo
que sucede en las aplicaciones Java de escritorio.
Constructor de la clase
public FirstMIDlet() { }
Inicia la MIDlet, en lugar de main().
public void startApp() {
Compilar y preverificar
Cuando se utiliza Java Wireless Toolkit, o algn otro entorno de desarrollo, el
proceso de compilacin y preverificacin es sumamente sencillo:
Una vez escrito el cdigo de las clases que compongan la aplicacin se ejecuta
JWT y se abre la aplicacin a compilar. En JWT se puede tambin depurar el cdigo,
probar y empaquetar la aplicacin, etc.
Para compilar la MIDlet, una vez abierta, hay que seleccionar la opcin "Build",
esto crear el archivo de clase o bien indicar los errores que se tengan. El compilado
con JWT incluye la preverificacin.
Tambin se puede compilar y preverificar el cdigo fuente desde la linea de
comando del sistema operativo. Teniendo correctamente instalado el SDK de Java y
CLDC se utiliza:
32
Empaquetado
Si una aplicacin consta de mltiples clases, una archivo .jar es usado para
agruparlas, as es ms fcil de distribuir y desplegar. esto se puede hacer desde linea
de comandos de la siguiente manera:
jar cf [archivo.jar] [clases]
El siguiente paso es crear el archivo descriptor de la aplicacin (archivo .jad), el
cual provee informacin sobre el contenido del archivo .jar. Un ejemplo de archivo
descriptor de aplicacin es el siguiente:
MIDlet-Name: MID1
MIDlet-Version:1.0.0
MIDlet-Vendor:Sun Microsystems, Inc.
MIDlet-Description: Primera MIDlet
MIDlet-Info-URL: http://java.sun.com/j2me.
33
MIDlet-Jar-URL: MID1.jar
MIDlet-Jar-Size: 1063
MicroEdition-Profile: MIDP-2.0
MicroEdition-Configuration: CLDC-1.0
MIDlet-1: MID,icono.png, MIDlet1
MIDlet-2: MID1,MIDlet2
Las primeras lineas resultarn, seguramente, ms que obvias as que se
explicar nicamente el ltimo elemento (MIDlet-1), este contiene los datos de la
primera MIDlet integrante del paquete (hay que recordar que un paquete se puede
componer de muchas MIDlets) y consta de tres partes: nombre de la aplicacin, cono
(opcional) y clase. El nombre aparecer en la pantalla del dispositivo, acompaado del
cono (si existe), para que pueda ser seleccionado y la clase es el archivo compilado
que se ejecuta al seleccionar un nombre.
Probar la aplicacin empaquetada
Una vez que se ha empaquetado la aplicacin, se puede probar para asegurar
su funcionamiento agregando la opcin -descriptor al comando midp.
midp -descriptor MID1.jad
Utilizando en kit de Java es el mismo proceso que probar la aplicacin sin
empaquetar, ya que al realizar el paquete se genera automticamente el archivo
descriptor.
5.8. Construccin de una aplicacin MIDP (MIDlet)
Como se ha visto en unidades anteriores, se iniciar esta serie de programas
de ejemplo con el clsico cdigo fuente de una aplicacin que lo nico que hace es
mostrar un mensaje en la pantalla, en este caso el mensaje es "Hola mundo!".
El cdigo fuente es el siguiente:
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
Se comienza por importar los paquetes que son obligatorios para cualquier
MIDlet. Esto puede variar dependiendo de la finalidad de la clase a crear, pero para
una clase que ser la principal de su paquete, es forzoso el importar las clases del
paquete javax.microedition.midlet y lcdui se requiere para las operaciones de entrada
y salida de informacin.
34
35
36
Importante:
Busque informacin general sobre Interfaz Grfica de Usuario en J2ME
en internet o libros, para reforzar los contenidos estudiados hasta el
momento.
37