Sei sulla pagina 1di 50

1

INTRODUCCIN A LA PROGRAMACIN CON J2ME

Copyright 2012.

1. Introduccin
1.1. HolaMundo.
import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Form; import javax.microedition.midlet.MIDlet; /** Ejemplo. Como muchas aplicaciones de celular, no usa botones sino elementos de * men que se pueden desplegar de distintas formas. */ public class HolaMundo extends MIDlet{ private final Display pantalla = Display.getDisplay(this); private final Command salir = new Command("Salir", Command.EXIT, 1); private final Form forma = new Form("Hola Mundo"); { forma.addCommand(salir); // Se asigna el controlador de la forma. forma.setCommandListener(new CommandListener() { public void commandAction(Command c, Displayable d) { if (c == salir){ // seleccion salir termina(); } } }); } /** Cdigo que se ejecuta cuando el MIDlet se activa. */ protected void startApp() { pantalla.setCurrent(forma); } /** Cdigo que se ejecuta cuando el MIDlet entra en estado de pausa. */ protected void pauseApp() { } /** Cdigo que se ejecuta cuando el MIDlet es destrudo. Normalmente se liberan los * recursos ocupados por el MIDlet como memoria, etc. * @param unconditional true indica que se debe destrur forzosamente. * false indica que se puede destrur la destruccin del MIDlet lanzando la * excepcin MIDletStateChangeException.*/ protected void destroyApp(boolean unconditional){ } private void termina(){ destroyApp(false); notifyDestroyed(); } }

1.2. Ejemplo con Herencia. 1.2.1. Forma Bsica.


Se coloca en paquete para que se pueda importar desde cualquier otro paquete.
package movil.si.me; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Form; /** Forma con un botn de salir. */ public class FormaBasica extends Form { private final Command salir = new Command("Salir", Command.EXIT, 1); public FormaBasica(String titulo, CommandListener oyente) { super(titulo); addCommand(salir); setCommandListener(oyente); } public Command getSalir() { return salir; } }

1.2.2. Midlet Bsico.


package movil.si.me; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; /** * @author RICARDO ARMANDO * Controlador de la aplicacin de ejemplo. Lleva el control del caso de uso y de los eventos. */ public class MidletBasico extends MIDlet implements CommandListener { protected final Display pantalla = Display.getDisplay(this); protected final FormaBasica forma; public MidletBasico(String titulo) { this.forma = new FormaBasica(titulo, this); } protected void startApp() throws MIDletStateChangeException { pantalla.setCurrent(forma); } protected void pauseApp() { } protected void destroyApp(boolean unconditional) { }

4
public void commandAction(Command c, Displayable d) { if (c == forma.getSalir()) { termina(); } } private void termina() { destroyApp(false); notifyDestroyed(); } }

1.2.3. Uso de la Herencia.


import movil.si.me.MidletBasico; /** Controlador de la aplicacin de ejemplo. Lleva el control del caso de uso y de los * eventos. */ public class CtrlHolaMundo extends MidletBasico { public CtrlHolaMundo() { super("Hola Mundo 2"); forma.append("Saludos desde mi Casita"); } }

1.3. Archivos de Configuracin y su Uso. 1.3.1. Manifest.


MIDlet-4: Teletipos,,Teletipos MIDlet-3: Atributos,,Atributos MIDlet-2: Hola Mundo 2,,CtrlHolaMundo MIDlet-1: Hola Mundo,,HolaMundo MIDlet-Vendor: Vendor saludo: Hola MIDlet-Name: ME Intro MIDlet-Version: 1.0 MicroEdition-Configuration: CLDC-1.0 MicroEdition-Profile: MIDP-2.0

1.3.2. Archivo Descriptor (meintro.jad).


MIDlet-1: Hola Mundo,,HolaMundo MIDlet-2: Hola Mundo 2,,CtrlHolaMundo MIDlet-3: Atributos,,Atributos MIDlet-4: Teletipos,,Teletipos MIDlet-Jar-Size: 44762 MIDlet-Jar-URL: meintro.jar MIDlet-Name: ME Intro MIDlet-Vendor: Vendor MIDlet-Version: 1.0 MicroEdition-Configuration: CLDC-1.0 MicroEdition-Profile: MIDP-2.0 saludo: Hola

1.3.2. Uso de los Atributos.


import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Form; import javax.microedition.lcdui.StringItem; import javax.microedition.midlet.*; /** Las aplicaciones pueden definir atributos que describen o * configuran el midlet. Los atributos se pueden definir en el * manifest del jar o en el archivo jad. Los atributos * predefinidos ms comunes son los siguientes: * MIDlet-Name Nombre de la MIDlet suite. * MIDlet-Version Versin de la MIDlet suite. * MIDlet-Vendor Desarrollador del MIDlet. * MIDlet-n Nombre de la suite, cono y nombre del MIDlet * n. (Es un listado de los midlets en el jar.) * Microedition-Configuration Configuracin necesitada para * ejecutar el MIDlet. * Microedition-Profile Perfil necesitado para ejecutar el * MIDlet. * MIDlet-Jar-URL URL del archivo JAR de la MIDlet suite. */ public class Atributos extends MIDlet implements CommandListener { /** Lista de atributos a revisar. */ private static final String[] atributos ={ "MIDlet-Name", "MIDlet-Version", "MIDlet-Vendor", "MIDlet-Jar-URL"}; private final Display pantalla = Display.getDisplay(this); private final Command salir = new Command("Salir", Command.EXIT, 1); private final Form forma = new Form("Atributos"); { forma.addCommand(salir); forma.setCommandListener(this); } public void startApp() { pantalla.setCurrent(forma); /* la operacin append(string) es equivalente a append(new StringItem(etiqueta, contenido)) */ forma.append(new StringItem("saludo", getAppProperty("saludo"))); //usamos un ciclo para no repetir el cdigo de arriba for(int i=0; i<atributos.length; i++){ String atributo=atributos[i]; forma.append(new StringItem(atributo, getAppProperty(atributo))); }

} public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command c, Displayable d) { if (c == salir){ // seleccion salir termina(); } } private void termina() { destroyApp(false); notifyDestroyed(); } }

1.4. Teletipos.
import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Form; import javax.microedition.lcdui.Ticker; import javax.microedition.midlet.MIDlet; /** * Ejemplo del uso de teletipos */ public class Teletipos extends MIDlet implements CommandListener { private final Display pantalla = Display.getDisplay(this); private final Command salir = new Command("Salir", Command.EXIT, 1); private final Ticker ticker = new Ticker(Saludos desde mi Casita); private final Form formulario = new Form("Hola"); { formulario.setTicke(ticker); formulario.append("Hola Mundo"); formulario.addCommand(salir); formulario.setCommandListener(this); } public void startApp() { pantalla.setCurrent(formulario); } public void pauseApp() {

7
} public void destroyApp(boolean unconditional) { } public void commandAction(Command c, Displayable d) { if (c == salir) { termina(); } } private void termina() { destroyApp(false); notifyDestroyed(); } }

Interfaces Grficas De Usuario En El Celular

2. Interfaces Grficas de Usuario.


2.1. Alertas.
package interfaces; import javax.microedition.lcdui.Alert; import javax.microedition.lcdui.AlertType; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Form; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; /** Despliege de avisos. Los conos se pueden cambiar con el AlertType. Los tipos * de alerta son "AlertType.ALARM", "AlertType.CONFIRMATION", "AlertType.ERROR" y * "AlertType.WARNING". cada tipo tiene un sonido diferente. */ public class Alertas extends MIDlet implements CommandListener { /** Alerta Predefinida: Se muestra y se cierra sola despus de un tiempo. */ private final Alert alert = new Alert("Alerta Predefinida", "Espere un momento. ",null,AlertType.ALARM); /** Alerta Modal: Es cerrada por el usuario. */ private final Alert alModal = new Alert("Alerta Modal", "Seleccione la opcin.",null,AlertType.INFO); { alModal.setTimeout(Alert.FOREVER); } /** Alerta No Modal: La pantalla de aviso permanece un tiempo definido. */ private final Alert alNoModal = new Alert("Alerta No Modal", "Se cierra en 5 segundos.", null, AlertType.WARNING); { alNoModal.setTimeout(5000); } private final Command cmdSalir = new Command("Salir", Command.EXIT, 1); private final Command cmdPredefinida = new Command("Alerta Predefinida", Command.SCREEN, 1); private final Command cmdModal = new Command("Alerta Modal", Command.SCREEN, 1); private final Command cmdNoModal = new Command("Alerta No Modal", Command.SCREEN, 1); private final Display display = Display.getDisplay(this); private final Form forma = new Form("Alertas"); { forma.addCommand(cmdSalir); forma.addCommand(cmdPredefinida); forma.addCommand(cmdModal); forma.addCommand(cmdNoModal); forma.addCommand(cmdSalir); forma.setCommandListener(this); }

10

protected void startApp() throws MIDletStateChangeException { display.setCurrent(forma); } protected void destroyApp(boolean unconditional){ } protected void pauseApp() { } public void commandAction(Command c, Displayable d) { if ( c==cmdPredefinida){ muestraPredefinida(); }else if (c == cmdModal){ muestraModal(); }else if (c == cmdNoModal){ muestraNoModal(); }else if (c == cmdSalir){ termina(); } } private void muestraPredefinida() { /* Primero muestra una Alert y al cerrarla muestra un Displayable. */ display.setCurrent(alert, forma); } private void muestraModal() { display.setCurrent(alModal, forma); } private void muestraNoModal() { display.setCurrent(alNoModal, forma); } private void termina() { destroyApp(false); notifyDestroyed(); } }

2.2. Textos de Toda la Pantalla.


package interfaces; import javax.microedition.lcdui.Alert; import javax.microedition.lcdui.AlertType; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display;

10

11
import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.TextBox; import javax.microedition.lcdui.TextField; import javax.microedition.midlet.*; /** Ejemplo de como usa un TextBox. Para configurar con ms detalle se pueden aplicar * los conceptos del programa TextFields. */ public class Textos extends MIDlet implements CommandListener { private final Display display = Display.getDisplay(this); private final Command cmdSalir = new Command("Salir", Command.EXIT, 1); private final Command cmdLimpiar = new Command("Limpiar", Command.SCREEN, 1); private final Command cmdUsar = new Command("Usar", Command.SCREEN, 1); private final TextBox texto = new TextBox("Pensamiento", "Escribe aqu un pensamiento", 300, TextField.ANY); { texto.addCommand(cmdLimpiar); texto.addCommand(cmdUsar); texto.addCommand(cmdSalir); texto.setCommandListener(this); } private final Alert alerta = new Alert("Pensamiento Ledo", "", null, AlertType.INFO); { alerta.setTimeout(Alert.FOREVER); } public void startApp() { display.setCurrent(texto); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command c, Displayable d) { if (c == cmdLimpiar) { // seleccion limpiar clicEnCmdLimpiar(); } else if (c == cmdUsar) { // seleccion usar clicEnCmdUsar(); } else if (c == cmdSalir) { // seleccion salir clicEnCmdSalir(); } } private void clicEnCmdLimpiar() { texto.setString(""); } private void clicEnCmdUsar() {

11

12
final String introducido = texto.getString(); alerta.setString(introducido); display.setCurrent(alerta, texto); } private void clicEnCmdSalir() { destroyApp(false); notifyDestroyed(); } }

2.3. Mens de Toda la Pantalla. 2.3.1. Manejo de Imgenes.


package movil.si.me; import java.io.IOException; import javax.microedition.lcdui.Graphics; import javax.microedition.lcdui.Image; /** * * @author RICARDO ARMANDO */ public class ImagenesUtil { public static Image cargaImagen(String origen, int ancho, int altura){ try { Image original = Image.createImage(origen); int anchoOriginal = original.getWidth(); int alturaOriginal = original.getHeight(); Image transformada = Image.createImage(ancho,altura); Graphics g = transformada.getGraphics(); for(int y=0; y < altura; y++){ for(int x=0; x < ancho; x++ ){ g.setClip(x, y, x, ancho); int dx = x * anchoOriginal/ancho; int dy = y * alturaOriginal/altura; g.drawImage(original, x - dx, y - dy, Graphics.LEFT | Graphics.TOP); } } return Image.createImage(transformada); } catch (IOException ex) { ex.printStackTrace(); Image imagen = Image.createImage(ancho, altura); Graphics g= imagen.getGraphics(); g.setGrayScale(125); g.fillRect(0, 0, ancho, ancho); return Image.createImage(imagen);

12

13
}

} }

2.3.2. Listas Implcitas.


package interfaces; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Form; import javax.microedition.lcdui.List; import javax.microedition.midlet.*; import movil.si.me.ImagenesUtil; /** * @author RICARDO ARMANDO */ public class ListasImplicitas extends MIDlet implements CommandListener { private final Display display = Display.getDisplay(this); private final Command cmdSeleccionar = new Command("Ir", Command.ITEM, 0); private final Command cmdAtras = new Command("Regresar", Command.BACK, 1); private final Command cmdSalir = new Command("Salir", Command.EXIT, 1); private final List menu = new List("Menu", List.IMPLICIT); { menu.setSelectCommand(cmdSeleccionar); menu.addCommand(cmdSalir); menu.setCommandListener(this); } private final Form forma0 = new Form("Compras"); { forma0.addCommand(cmdAtras); forma0.setCommandListener(this); } private final Form forma1 = new Form("Productos"); { forma1.addCommand(cmdAtras); forma1.setCommandListener(this); } private final Form forma2 = new Form("Proveedores"); { forma2.addCommand(cmdAtras);

13

14
forma2.setCommandListener(this); } public void startApp() { display.setCurrent(menu); int ancho = display.getBestImageWidth(Display.LIST_ELEMENT); int altura = display.getBestImageHeight(Display.LIST_ELEMENT); menu.insert(0,"Compras", ImagenesUtil.cargaImagen("/img/compras16.png", ancho, altura)); menu.insert(1,"Productos", ImagenesUtil.cargaImagen("/img/productos16.png", ancho, altura)); menu.insert(2,"Proveedores", ImagenesUtil.cargaImagen("/img/proveedores16.png", ancho, altura)); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command c, Displayable d) { if (c == List.SELECT_COMMAND || c == cmdSeleccionar){ opcionSeleccionada(); }else if (c == cmdAtras){ display.setCurrent(menu); }else if (c == cmdSalir){ termina(); } } private void opcionSeleccionada() { switch(menu.getSelectedIndex()){ case 0: muestraForma0(); break; case 1: muestraForma1(); break; case 2: muestraForma2(); break; } } private void muestraForma0() { display.setCurrent(forma0); } private void muestraForma1() { display.setCurrent(forma1); } private void muestraForma2() {

14

15
display.setCurrent(forma2); } private void termina() { destroyApp(false); notifyDestroyed(); } }

2.4. Listas de Seleccin nica de Toda la Pantalla.


package interfaces; import javax.microedition.lcdui.Alert; import javax.microedition.lcdui.AlertType; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.List; import javax.microedition.midlet.*; /** * @author RICARDO ARMANDO */ public class ListasExclusivas extends MIDlet implements CommandListener { private static final String[] opciones = { "Opcion 1", "Opcion 2", "Opcion 3" }; private final Display display =Display.getDisplay(this); private final Command cmdSalir = new Command("Salir", Command.EXIT, 1); private final Command cmdContinuar = new Command("Continuar", Command.SCREEN, 1); private final List menu = new List("Escoja Una Opcin", List.EXCLUSIVE, opciones, null); { menu.addCommand(cmdContinuar); menu.addCommand(cmdSalir); menu.setCommandListener(this); } private final Alert alerta = new Alert("Seleccion", "", null, AlertType.INFO); { alerta.setTimeout(Alert.FOREVER); } public void startApp() { display.setCurrent(menu); }

15

16
public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command c, Displayable d) { if (c == cmdContinuar){ continua(); }else if (c == cmdSalir){ termina(); } } private void continua() { final int seleccion = menu.getSelectedIndex(); alerta.setString("Seleccion: "+(seleccion + 1)); display.setCurrent(alerta, menu); } private void termina() { destroyApp(false); notifyDestroyed(); } }

2.5. Listas de Seleccin Mltiple de Toda la Pantalla.


package interfaces; import javax.microedition.lcdui.Alert; import javax.microedition.lcdui.AlertType; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.List; import javax.microedition.midlet.*; /** * @author RICARDO ARMANDO */ public class ListasMultiples extends MIDlet implements CommandListener { private final Display display = Display.getDisplay(this); private final Command cmdSalir = new Command("Salir", Command.EXIT, 1); private final Command cmdContinuar = new Command("Continuar", Command.SCREEN, 1); private final List menu = new List("Escoja Opciones", List.MULTIPLE); { menu.append("Opcion 1", null); menu.append("Opcion 2", null); menu.append("Opcion 3", null); menu.addCommand(cmdSalir); menu.addCommand(cmdContinuar);

16

17
menu.setCommandListener(this); } private final Alert alerta = new Alert("Selecciones", "", null, AlertType.INFO); { alerta.setTimeout(Alert.FOREVER); } public void startApp() { display.setCurrent(menu); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command c, Displayable d) { if (c == cmdContinuar){ continua(); }else if (c == cmdSalir){ termina(); } } private void continua() { boolean seleccionados[] = new boolean[menu.size()]; StringBuffer sb = new StringBuffer("Selecciones:\n"); menu.getSelectedFlags(seleccionados); for(int i=0; i < menu.size(); i++){ if (seleccionados[i]){ sb.append(" SI\n"); }else{ sb.append(" NO\n"); } alerta.setString(sb.toString()); display.setCurrent(alerta, menu); }

} private void termina() { destroyApp(false); notifyDestroyed(); } }

2.6. Formas y Cuadros de Texto.


package interfaces; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener;

17

18
import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Form; import javax.microedition.lcdui.Item; import javax.microedition.lcdui.TextField; import javax.microedition.midlet.*; /** Distintas formas de usar y configurar TextFields. Muchos de estos conceptos * tambin se aplican a TextBox. */ public class TextFields extends MIDlet implements CommandListener { Display display = Display.getDisplay(this); private final TextField txtNormal = new TextField("Normal: ", "", 70, TextField.ANY); private final TextField txtTelefono = new TextField("Telefono: ", "", 70, TextField.PHONENUMBER); private final TextField txtEmail = new TextField("Email: ", "@", 70, TextField.EMAILADDR); private final TextField txtUrl = new TextField("URL: ", "http://", 70, TextField.URL); private final TextField txtNumerico = new TextField("Numerico: ", "", 70, TextField.NUMERIC); private final TextField txtDecimal = new TextField("Decimal: ", "", 70, TextField.DECIMAL); private final TextField txtContrasea = new TextField("Contrasea: ", "", 70, TextField.PASSWORD); private final TextField txtMayusculas = new TextField("Mayusculas: ", "", 70, TextField.ANY); { txtMayusculas.setInitialInputMode("MIDP_UPPERCASE_LATIN"); } private final TextField txtMinusculas = new TextField("Minusculas: ", "", 70, TextField.ANY); { txtMinusculas.setInitialInputMode("MIDP_LOWERCASE_LATIN"); } private final Command cmdContinuar = new Command("Continuar", Command.SCREEN, 1); private final Command cmdSalir = new Command("Salir", Command.EXIT, 1); private final Form forma = new Form("Campos de Texto", new Item[] {txtNormal, txtContrasea, txtTelefono, txtEmail, txtUrl, txtNumerico, txtDecimal, txtMayusculas, txtMinusculas}); { forma.addCommand(cmdContinuar); forma.addCommand(cmdSalir); forma.setCommandListener(this); } public void startApp() { display.setCurrent(forma); } public void pauseApp() { } public void destroyApp(boolean unconditional) {

18

19
} public void commandAction(Command c, Displayable d) { if (c==cmdContinuar){ continua(); }else if ( c == cmdSalir){ termina(); }

} private void continua() { String contrasea = txtContrasea.getString(); txtNormal.setString(contrasea); txtNormal.getCaretPosition(); } private void termina() { destroyApp(false); notifyDestroyed(); } }

2.7. Indicadores de Valores Numricos.


package interfaces; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Form; import javax.microedition.lcdui.Gauge; import javax.microedition.lcdui.Item; import javax.microedition.lcdui.ItemStateListener; import javax.microedition.lcdui.StringItem; import javax.microedition.midlet.*; /** * @author RICARDO ARMANDO */ public class Indicadores extends MIDlet implements CommandListener, ItemStateListener { private final Display display = Display.getDisplay(this); /* Implements a graphical display, such as a bar graph, of an integer value. The Gauge contains a current value that lies between zero and the maximum value, inclusive. The application can control the current value and maximum value.

19

20
The range of values specified by the application may be larger than the number of distinct visual states possible on the device, so more than one value may have the same visual representation. */ private final Gauge gNivel = new Gauge("Nivel:", true, 4, 0); private final StringItem strSignificado = new StringItem("Significado:", "Congelado"); private final Command salir = new Command("Salir", Command.EXIT, 1); private final Form forma = new Form("Temperatura"); { forma.append(gNivel); forma.append(strSignificado); forma.addCommand(salir); forma.setCommandListener(this); forma.setItemStateListener(this); } public void startApp() { display.setCurrent(forma); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command c, Displayable d) { if (c == salir) { termina(); } } public void itemStateChanged(Item i) { if (i == gNivel) { cambioDeNivel(); } } private void cambioDeNivel() { int nivel = gNivel.getValue(); switch (nivel) { case 0: strSignificado.setText("Congelado"); break; case 1: strSignificado.setText("Frio"); break; case 2: strSignificado.setText("Templado"); break; case 3: strSignificado.setText("Caliente"); break; case 4:

20

21
strSignificado.setText("Quemndose"); } } private void termina() { destroyApp(false); notifyDestroyed(); } }

2.8. Despliegue de Fechas.


package interfaces; import java.util.Date; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.DateField; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Form; import javax.microedition.midlet.*; /** * @author RICARDO ARMANDO */ public class Fechas extends MIDlet implements CommandListener { private final Date fecha = new Date(); private final Display display = Display.getDisplay(this); private final DateField dfFecha = new DateField("Fecha:", DateField.DATE); { dfFecha.setDate(fecha); } private final DateField dfHora = new DateField("Hora:", DateField.TIME); { dfHora.setDate(fecha); } private final DateField dfFechaHora = new DateField("Fecha y Hora:", DateField.DATE_TIME); { dfFechaHora.setDate(fecha); } private final Command salir = new Command("Salir", Command.EXIT, 1); private final Form forma = new Form("Ejemplo"); { forma.append(dfFecha); forma.append(dfHora); forma.append(dfFechaHora); forma.addCommand(salir);

21

22
forma.setCommandListener(this); } public void startApp() { display.setCurrent(forma); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command c, Displayable d) { if (c == salir){ termina(); } } private void termina() { destroyApp(false); notifyDestroyed(); } }

2.9. Elementos de Seleccin y Oyentes de Elementos.


package interfaces; import javax.microedition.lcdui.Choice; import javax.microedition.lcdui.ChoiceGroup; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Form; import javax.microedition.lcdui.Image; import javax.microedition.lcdui.Item; import javax.microedition.lcdui.ItemStateListener; import javax.microedition.midlet.*; import movil.si.me.ImagenesUtil; /** * @author RICARDO ARMANDO */ public class Choices extends MIDlet implements ItemStateListener, CommandListener { private static final String[]confirmar={ "Si","No","Tal vez","Todo lo contrario" }; private static final String[] sexo={"Masculino", "Femenino"}; private static final String[] permisos={"Compras", "Productos", "Proveedores"};

22

23
private final Display display = Display.getDisplay(this); private final int altura = display.getBestImageHeight(Display.CHOICE_GROUP_ELEMENT); private final int ancho = display.getBestImageWidth(Display.CHOICE_GROUP_ELEMENT); private Image[]imagenes= { ImagenesUtil.cargaImagen("/img/compras16.png", ancho, altura), ImagenesUtil.cargaImagen("/img/productos16.png", ancho, altura), ImagenesUtil.cargaImagen("/img/proveedores16.png", ancho, altura)}; private final ChoiceGroup chcSexo= new ChoiceGroup("Sexo:",Choice.POPUP,sexo,null); private final ChoiceGroup chcConfirmar= new ChoiceGroup("Confirmar:",Choice.EXCLUSIVE,confirmar,null); private final ChoiceGroup chcPermisos= new ChoiceGroup("Permisos:",Choice.MULTIPLE,permisos,imagenes); private final Command salir = new Command("Salir",Command.EXIT, 1); private final Form forma=new Form("Ejemplo", new Item[]{chcSexo,chcConfirmar, chcPermisos}); { forma.addCommand(salir); forma.setItemStateListener(this); forma.setCommandListener(this); } public void startApp() { display.setCurrent(forma); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command c, Displayable d) { if (c == salir){ termina(); } } public void itemStateChanged(Item i) { if (i == chcSexo){ display.vibrate(3000); } } private void termina() { destroyApp(false); notifyDestroyed(); } }

2.10. Colocacin de Imgenes.


package interfaces;

23

24

import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Form; import javax.microedition.lcdui.Image; import javax.microedition.lcdui.ImageItem; import javax.microedition.lcdui.Item; import javax.microedition.lcdui.ItemCommandListener; import javax.microedition.lcdui.StringItem; import javax.microedition.midlet.*; import movil.si.me.ImagenesUtil; /** * @author RICARDO ARMANDO */ public class Imagenes extends MIDlet implements CommandListener, ItemCommandListener { private final Display display =Display.getDisplay(this); private final int ancho = display.getBestImageWidth(Display.LIST_ELEMENT); private final int altura = display.getBestImageHeight(Display.LIST_ELEMENT); private Image imgUsuario = ImagenesUtil.cargaImagen("/img/usuario16.png", ancho, altura); private Image imgProveedores = ImagenesUtil.cargaImagen("/img/proveedores16.png", ancho, altura); private Command cmdAdios = new Command("Adios", Command.ITEM, 1); private ImageItem imgAdios= new ImageItem("Adios", imgProveedores, Item.LAYOUT_LEFT, "Adios", StringItem.HYPERLINK); { imgAdios.setDefaultCommand(cmdAdios); imgAdios.setItemCommandListener(this); } private ImageItem imgCentro = new ImageItem(null, imgUsuario, ImageItem.LAYOUT_NEWLINE_BEFORE |ImageItem.LAYOUT_CENTER ImageItem.LAYOUT_NEWLINE_AFTER, "Proveedores"); private ImageItem imgIzquierda = new ImageItem(null, imgUsuario, ImageItem.LAYOUT_NEWLINE_BEFORE |ImageItem.LAYOUT_DEFAULT ImageItem.LAYOUT_NEWLINE_AFTER, "Proveedores"); private ImageItem imgDerecho = new ImageItem(null, imgUsuario, ImageItem.LAYOUT_NEWLINE_BEFORE |ImageItem.LAYOUT_RIGHT ImageItem.LAYOUT_NEWLINE_AFTER, "Proveedores");

private final Command salir = new Command("Salir", Command.EXIT, 1); private final Form formulario = new Form("Ejemplo", new Item[]{imgAdios, imgIzquierda, imgCentro, imgDerecho});

24

25
{ formulario.addCommand(salir); formulario.setCommandListener(this); } public void startApp() { display.setCurrent(formulario); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command c, Displayable d) { if (c == salir){ termina(); } } public void commandAction(Command c, Item item) { if (c == cmdAdios){ termina(); } } private void termina() { destroyApp(false); notifyDestroyed(); } }

2.11. Interfaces de Bajo Nivel. 2.11.1. Canvas.


package bajo.nivel; import javax.microedition.lcdui.Canvas; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Graphics; /** * @author RICARDO ARMANDO */ public class CanvasHola extends Canvas { private final Command cmdSalir = new Command("Salir", Command.EXIT, 1); public CanvasHola(CommandListener oyente){

25

26
setTitle("Hola"); addCommand(cmdSalir); setCommandListener(oyente); } public Command getCmdSalir() { return cmdSalir; } // Para poder hacer tus propios dibujos o componentes protected void paint(Graphics g) { int x = getWidth()/2; int y = getHeight()/2; int colocacion = Graphics.BASELINE | Graphics.HCENTER; g.setColor(255, 255, 255);//Blanco g.fillRect(0, 0, getWidth(), getHeight()); g.setColor(0, 0, 0); g.drawString("Hola Mundo", x, y, colocacion); } }

2.11.2. Midlet.
package bajo.nivel; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.midlet.*; /** * @author RICARDO ARMANDO */ public class BajoHola extends MIDlet implements CommandListener { private final Display display = Display.getDisplay(this); private final CanvasHola canvas = new CanvasHola(this); public void startApp() { display.setCurrent(canvas); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command c, Displayable d) { if (c == canvas.getCmdSalir()){ termina(); } } private void termina() {

26

27
destroyApp(false); notifyDestroyed(); } }

2.12. Manejo de Eventos de Bajo Nivel. 2.12.1. Canvas.


package bajo.nivel; import javax.microedition.lcdui.Canvas; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Graphics; import javax.microedition.lcdui.Image; import movil.si.me.ImagenesUtil; /** * * @author RICARDO ARMANDO */ public class CanvasImagen extends Canvas{ private int x,y; private final Image im; private final int dx, dy; private final Command cmdSalir = new Command("Salir", Command.EXIT, 1); public CanvasImagen(int anchoImg, int alturaImg, CommandListener oyente) { addCommand(cmdSalir); setCommandListener(oyente); dx = anchoImg / 2; dy = alturaImg / 2; im= ImagenesUtil.cargaImagen("img/usuario16.png", anchoImg, alturaImg); } public Command getCmdSalir() { return cmdSalir; } public void paint(Graphics g) { g.setColor(255, 255, 255); g.fillRect(0, 0, getWidth(), getHeight()); //Llena el rectangulo con el color especificado g.setColor(0, 0, 0); g.drawImage(im, x, y, Graphics.TOP | Graphics.LEFT); } protected void keyPressed(int keyCode){ switch(getGameAction(keyCode)){ case Canvas.DOWN: if ((y + 2 * dy ) < getHeight()){ y+= dy; } break;

27

28
case Canvas.LEFT: if (x > 0){ x -= dx; } break; case Canvas.UP: if (y > 0){ y -= dy; } break; case Canvas.RIGHT: if ((x + 2 * dy) < getWidth()){ x += dx; } break; } this.repaint(); } }

2.12.2. Midlet.
package bajo.nivel; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.midlet.*; /** * @author RICARDO ARMANDO */ public class MoverImagen extends MIDlet implements CommandListener { private final Display display = Display.getDisplay(this); private final CanvasImagen canvas CanvasImagen(display.getBestImageWidth(Display.LIST_ELEMENT), display.getBestImageHeight(Display.LIST_ELEMENT), this); public void startApp() { display.setCurrent(canvas); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command c, Displayable d) { if (c == canvas.getCmdSalir()){

new

28

29
termina(); } } private void termina() { destroyApp(false); notifyDestroyed(); } }

29

30

RECORD SETS EN JAVA ME

30

31

1. Endidad ContactoMe.
import java.util.Date; public class ContactoMe { private int id; private String nombre=""; private String telefono=""; private Date nacimiento; public void setId(int id) { this.id = id; } public int getId() { return id; } public void setNombre(String nombre) { this.nombre = nombre; } public String getNombre() { return nombre; } public void setTelefono(String telefono) { this.telefono = telefono; } public String getTelefono() { return telefono; } public void setNacimiento(Date nacimiento) { this.nacimiento = nacimiento; } public Date getNacimiento() { return nacimiento; } }

2. InfoContactoRs.
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.util.Date; import java.util.Vector; import javax.microedition.rms.RecordEnumeration; import javax.microedition.rms.RecordStore;

31

32
import javax.microedition.rms.RecordStoreException;

/* RecordEnumeration An interface representing a bidirectional record store Record enumerator. The RecordEnumeration logically maintains a sequence of the recordId's of the records in a record store. The enumerator will iterate over all (or a subset, if an optional record filter has been supplied) of the records in an order determined by an optional record comparator. RecordStore A class representing a record store. A record store consists of a collection of records which will remain persistent across multiple invocations of the MIDlet. The platform is responsible for making its best effort to maintain the integrity of the MIDlet's record stores throughout the normal use of the platform, including reboots, battery changes, etc. * RecordStoreException * Thrown to indicate a general exception occurred in a record store operation. */ public class InfoContactoRs { public Vector todos(RecordStore rs) throws RecordStoreException, IOException{ Vector lista = new Vector(rs.getNumRecords()); // rs.enumerateRecords Returns an enumeration for traversing a set of records in the record store in an optionally //specified order. RecordEnumeration re = rs.enumerateRecords(null, null, false); while(re.hasNextElement()){ //Returns the recordId of the next record in this enumeration, where next is defined by the comparator //and/or filter supplied in the constructor of this enumerator. After calling this method, the enumeration is //advanced to the next available record int id = re.nextRecordId(); String idNombre = leeIdNombre(rs, id); lista.addElement(idNombre); } return lista; } public String leeIdNombre(RecordStore rs, int id) throws RecordStoreException, IOException{ //Returns a copy of the data stored in the given record byte[] buffer = rs.getRecord(id); //A ByteArrayInputStream contains an internal buffer that contains bytes that may be read from the stream.

32

33
//An internal counter keeps track of the next byte to be supplied by the read method. ByteArrayInputStream bais = new ByteArrayInputStream(buffer); //A data input stream lets an application read primitive Java data types from an underlying input stream //in a machine-independent way. An application uses a data output stream to write data that can later be read by a data input stream. DataInputStream dis = new DataInputStream(bais); //Bytes for this operation are read from the contained input stream String nombre = dis.readUTF(); return id + "-" + nombre; } /* */ public int agrega(RecordStore rs, ContactoMe objeto) throws RecordStoreException, IOException{ byte[]record = guarda(objeto); return rs.addRecord(record, 0, record.length); } private byte[] guarda(ContactoMe objeto) throws IOException{ ByteArrayOutputStream baos = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(baos); dos.writeUTF(objeto.getNombre()); dos.writeUTF(objeto.getTelefono()); dos.writeLong(objeto.getNacimiento().getTime()); dos.flush(); return baos.toByteArray(); } public ContactoMe busca(RecordStore rs, int id) throws RecordStoreException, IOException{ RecordEnumeration re = rs.enumerateRecords(null, null, false); while(re.hasNextElement()){ if (id == re.nextRecordId()){ ContactoMe objeto = leeObjeto(rs, id); return objeto; } } return null; } public ContactoMe leeObjeto(RecordStore rs, int id) throws RecordStoreException, IOException{ byte[] buffer = rs.getRecord(id); ByteArrayInputStream bais = new ByteArrayInputStream(buffer);

33

34
DataInputStream dis = new DataInputStream(bais); ContactoMe objeto = new ContactoMe(); objeto.setId(id); objeto.setNombre(dis.readUTF()); objeto.setTelefono(dis.readUTF()); objeto.setNacimiento(new Date(dis.readLong())); return objeto; } public void modifica(RecordStore rs, ContactoMe objeto) throws RecordStoreException, IOException{ byte [] record = guarda(objeto); /* * Sets the data in the given record to that passed in. After this method returns, a call to getRecord(int recordId) will return an array of numBytes size containing the data supplied here. Parameters: recordId - the ID of the record to use in this operation newData - the new data to store in the record offset - the index into the data buffer of the first relevant byte for this record numBytes - the number of bytes of the data buffer to use for this record */ rs.setRecord(objeto.getId(), record, 0, record.length); } public void elimina(RecordStore rs, int id) throws RecordStoreException{ rs.deleteRecord(id); } }

3. Nombre del Record Set (RsMers).


/** * * @author RICARDO ARMANDO */ public class RsMers { public static final String PRUEBA = "prueba"; }

34

35

4. Agregar.
4.1. FrmContactoNuevo.
import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.DateField; import javax.microedition.lcdui.Form; import javax.microedition.lcdui.TextField; /** * El Form es como una ventana o forma que tu colocas en el display * @author RICARDO ARMANDO */ public class FrmContactoNuevo extends Form { public static final Command CMD_SALIR = new Command("Salir", Command.EXIT, 1); public static final Command CMD_GUARDAR = new Command("Guardar", Command.SCREEN, 1); private final TextField nombre = new TextField("Nombre:", "", 30, TextField.ANY); private final TextField telefono = new TextField("Telefono:", "", 15, TextField.PHONENUMBER); private final DateField nacimiento = new DateField("Nacimiento:", DateField.DATE); public FrmContactoNuevo(CommandListener oyente) { super("Nuevo Contacto"); append(nombre); append(telefono); append(nacimiento); addCommand(CMD_SALIR); addCommand(CMD_GUARDAR); setCommandListener(oyente); } public TextField getNombre() { return nombre; } public TextField getTelefono() { return telefono; } public DateField getNacimiento() { return nacimiento; } }

4.2. CtrlContactoNuevo.
import javax.microedition.lcdui.Alert; import javax.microedition.lcdui.AlertType; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.midlet.*;

35

36
import javax.microedition.rms.RecordStore; import javax.microedition.rms.RecordStoreException;

public class CtrlContactoNuevo extends MIDlet implements CommandListener { Display display = Display.getDisplay(this); private final FrmContactoNuevo forma = new FrmContactoNuevo(this); private final InfoContactoRs info = new InfoContactoRs(); private final Alert alert = new Alert("Error"); public void startApp() { display.setCurrent(forma); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command c, Displayable d) { if (c == FrmContactoNuevo.CMD_GUARDAR){ guarda(); }else if (c == FrmContactoNuevo.CMD_SALIR){ termina(); } } private void guarda() { RecordStore rs = null; try { ContactoMe objeto = lee(); rs = RecordStore.openRecordStore(RsMers.PRUEBA, true); info.agrega(rs, objeto); muestraMensaje("Agregado."); } catch (Exception ex) { muestraError(ex); }finally{ if (rs !=null){ try { rs.closeRecordStore(); } catch (RecordStoreException ex) { muestraError(ex); }

} } } private ContactoMe lee() { ContactoMe objeto = new ContactoMe();

36

37
objeto.setNombre(forma.getNombre().getString().trim()); objeto.setTelefono(forma.getTelefono().getString().trim()); objeto.setNacimiento(forma.getNacimiento().getDate()); return objeto; } private void termina() { destroyApp(false); notifyDestroyed(); } private void muestraError(Exception ex) { alert.setTitle("Error"); alert.setType(AlertType.ERROR); alert.setString(ex.getMessage()); ex.printStackTrace(); display.setCurrent(alert, forma); } private void muestraMensaje(String texto) { alert.setTitle("Informacin"); alert.setType(AlertType.INFO); alert.setString(texto); display.setCurrent(alert, forma); } }

5. Listados.
5.1. FrmTodos.
import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.List; /** * @author RICARDO ARMANDO */ public class FrmTodos extends List { public static final Command CMDSALIR = new Command("Salir", Command.EXIT, 1); public FrmTodos(CommandListener oyente) { super("Contactos", IMPLICIT); addCommand(CMDSALIR); setCommandListener(oyente); } }

37

38

5.2. CtrlContactos.
import java.util.Enumeration; import java.util.Vector; import javax.microedition.lcdui.Alert; import javax.microedition.lcdui.AlertType; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.midlet.*; import javax.microedition.rms.RecordStore; import javax.microedition.rms.RecordStoreException; /** * @author RICARDO ARMANDO */ public class CtrlContactos extends MIDlet implements CommandListener { private Display display = Display.getDisplay(this); private final FrmTodos forma = new FrmTodos(this); private final InfoContactoRs info = new InfoContactoRs(); /* An alert is a screen that shows data to the user and waits for a certain period of time before proceeding to the next Displayable.An alert can contain a text string and an image. The intended use of Alert is to inform the user about errors and other exceptional conditions. */ private final Alert alert = new Alert("Error"); public void startApp() { /* Requests that a different Displayable object be made visible on the display. The change will typically not take effect immediately.*/ display.setCurrent(forma); busca(); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command c, Displayable d) { if (c == FrmTodos.CMDSALIR){ termina(); } } private void busca() { RecordStore rs = null; try { rs = abre(); Vector idNombres = info.todos(rs); for (Enumeration en = idNombres.elements(); en.hasMoreElements(); ) { String idNombre = en.nextElement().toString();

38

39
forma.append(idNombre.toString(), null); } } catch (Exception ex) { muestraError(ex); }finally{ cierra(rs); } } private RecordStore abre()throws RecordStoreException { return RecordStore.openRecordStore(RsMers.PRUEBA, true); } private void cierra(RecordStore rs) { if (rs != null){ try { rs.closeRecordStore(); } catch (Exception ex) { muestraError(ex); } } } private void termina() { destroyApp(false); notifyDestroyed(); } private void muestraError(Exception ex) { alert.setTitle("Error"); alert.setType(AlertType.ERROR); alert.setString(ex.getMessage()); ex.printStackTrace(); display.setCurrent(alert, forma); } }

6. Modificar.
6.1. FrmContactoEditar.
import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.DateField; import javax.microedition.lcdui.Form; import javax.microedition.lcdui.TextField; /**

39

40
* @author RICARDO ARMANDO */ public class FrmContactoEditar extends Form { public static final Command SALIR = new Command("Salir", Command.EXIT, 1); public static final Command CMD_BUSCAR = new Command("Buscar", Command.SCREEN, 1); public static final Command CMD_GUARDAR = new Command("Guardar",Command.SCREEN, 1); private final TextField clave = new TextField("Clave:", "", 30, TextField.NUMERIC); private final TextField nombre = new TextField("Nombre:", "", 30, TextField.ANY); private final TextField telefono = new TextField("Telefono:", "", 15, TextField.PHONENUMBER); private final DateField nacimiento = new DateField("Nacimiento:", DateField.DATE); public FrmContactoEditar(CommandListener oyente) { super("Editar Contacto"); append(clave); append(nombre); append(telefono); append(nacimiento); addCommand(SALIR); addCommand(CMD_BUSCAR); addCommand(CMD_GUARDAR); setCommandListener(oyente); } public TextField getNombre() { return nombre; } public TextField getTelefono() { return telefono; } public DateField getNacimiento() { return nacimiento; } public TextField getClave() { return clave; } }

6.2. CtrlContactoEditar.
import javax.microedition.lcdui.Alert; import javax.microedition.lcdui.AlertType; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.midlet.*; import javax.microedition.rms.RecordStore;

40

41
import javax.microedition.rms.RecordStoreException; /** * @author RICARDO ARMANDO */ public class CtrlContactoEditar extends MIDlet implements CommandListener { private Display display = Display.getDisplay(this); private ContactoMe objeto; private final FrmContactoEditar forma = new FrmContactoEditar(this); private final InfoContactoRs info = new InfoContactoRs(); private final Alert alert = new Alert("Error"); public void startApp() { display.setCurrent(forma); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command c, Displayable d) { if (c == FrmContactoEditar.CMD_BUSCAR ){ busca(); }else if (c == FrmContactoEditar.CMD_GUARDAR){ guarda(); }else if (c == FrmContactoEditar.SALIR){ termina(); } } private void busca() { RecordStore rs = null; try { int id = leeId(); rs = abre(); objeto = info.busca(rs, id); muestra(); } catch (Exception ex) { muestraError(ex); }finally { cierra(rs); } } private int leeId() { String txtId = forma.getClave().getString(); return Integer.parseInt(txtId); } private void muestra() { forma.getNombre().setString(objeto.getNombre()); forma.getTelefono().setString(objeto.getTelefono());

41

42
forma.getNacimiento().setDate(objeto.getNacimiento()); } private void guarda() { RecordStore rs = null; try { lee(); rs = abre(); info.modifica(rs, objeto); muestraMensaje("Guardado."); } catch (Exception ex) { muestraError(ex); }finally { cierra(rs); } } private void lee() { objeto.setNombre(forma.getNombre().getString().trim()); objeto.setTelefono(forma.getTelefono().getString().trim()); objeto.setNacimiento(forma.getNacimiento().getDate()); } private RecordStore abre() throws RecordStoreException { return RecordStore.openRecordStore(RsMers.PRUEBA, true); } private void cierra(RecordStore rs) { if (rs != null){ try { rs.closeRecordStore(); } catch (RecordStoreException ex) { muestraError(ex); } } } private void termina() { destroyApp(false); notifyDestroyed(); } private void muestraError(Exception ex) { alert.setTitle("Error"); alert.setType(AlertType.ERROR); alert.setString(ex.getMessage()); ex.printStackTrace(); display.setCurrent(alert, forma); } private void muestraMensaje(String texto) {

42

43
alert.setTitle("Informacin"); alert.setType(AlertType.INFO); alert.setString(texto); display.setCurrent(alert, forma); } }

7. Eliminar.
7.1. FrmContactoEliminar.
import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.DateField; import javax.microedition.lcdui.Form; import javax.microedition.lcdui.StringItem; import javax.microedition.lcdui.TextField; /** * El Form es como una ventana o forma que tu colocas en el display * @author RICARDO ARMANDO */ public class FrmContactoEliminar extends Form { public static final Command CMD_SALIR = new Command("Salir", Command.EXIT, 1); public static final Command CMD_BUSCAR = new Command("Buscar", Command.SCREEN, 1); public static final Command CMD_ELIMINAR = new Command("Eliminar", Command.SCREEN, 1); private final TextField clave = new TextField("Clave:", "", 30, TextField.NUMERIC); private final StringItem nombre = new StringItem("Nombre:", ""); private final StringItem telefono = new StringItem("Telefono:", ""); private final StringItem nacimiento = new StringItem("Nacimiento:", ""); public FrmContactoEliminar(CommandListener oyente) { super("Eliminar Contacto"); append(clave); append(nombre); append(telefono); append(nacimiento); addCommand(CMD_SALIR); addCommand(CMD_BUSCAR); addCommand(CMD_ELIMINAR); setCommandListener(oyente); } public StringItem getNombre() { return nombre; } public StringItem getTelefono() { return telefono; }

43

44
public StringItem getNacimiento() { return nacimiento; } public TextField getClave() { return clave; } }

7.2. CtrlContactoEliminar.
import javax.microedition.lcdui.Alert; import javax.microedition.lcdui.AlertType; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.midlet.*; import javax.microedition.rms.RecordStore; import javax.microedition.rms.RecordStoreException; /** * @author RICARDO ARMANDO */ public class CtrlContactoEliminar extends MIDlet implements CommandListener { private Display display = Display.getDisplay(this); private ContactoMe objeto; private final FrmContactoEliminar forma = new FrmContactoEliminar(this); private final InfoContactoRs info = new InfoContactoRs(); private final Alert alert = new Alert("Error"); public void startApp() { display.setCurrent(forma); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command c, Displayable d) { if (c == FrmContactoEliminar.CMD_BUSCAR) { busca(); } else if (c == FrmContactoEliminar.CMD_ELIMINAR) { elimina(); } else if (c == FrmContactoEliminar.CMD_SALIR) { termina(); } } private void busca() { RecordStore rs = null;

44

45
try { int id = leeId(); rs = abre(); objeto = info.busca(rs, id); muestra(); } catch (Exception ex) { muestraError(ex); } finally { cierra(rs); } } private int leeId() { String txtId = forma.getClave().getString(); return Integer.parseInt(txtId); } private void muestra() { forma.getNombre().setText(objeto.getNombre()); forma.getTelefono().setText(objeto.getTelefono()); forma.getNacimiento().setText(objeto.getNacimiento().toString()); } private void elimina() { RecordStore rs = null; try { rs = abre(); info.elimina(rs, objeto.getId()); muestraMensaje("Eliminado"); } catch (Exception ex) { cierra(rs); } } private RecordStore abre() throws RecordStoreException { return RecordStore.openRecordStore(RsMers.PRUEBA, true); } private void cierra(RecordStore rs) { if (rs != null){ try { rs.closeRecordStore(); } catch (RecordStoreException ex) { muestraError(ex); } } } private void termina() { destroyApp(false); notifyDestroyed(); } private void muestraError(Exception ex) { alert.setTitle("Error");

45

46
alert.setType(AlertType.ERROR); alert.setString(ex.getMessage()); ex.printStackTrace(); display.setCurrent(alert, forma); } private void muestraMensaje(String texto) { alert.setTitle("Infromacin"); alert.setType(AlertType.INFO); alert.setString(texto); display.setCurrent(alert, forma); } }

46

47

COMUNICACIN CELULAR SERVIDOR

47

48

1. CtrlSaludo. En el celular. /* Hay que crear un MIDlet llamado CtrlSaludo */


package control; import java.io.DataInputStream; import java.io.IOException; import javax.microedition.io.Connector; import javax.microedition.io.HttpConnection; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.TextBox; import javax.microedition.lcdui.TextField; import javax.microedition.midlet.MIDlet; public class CtrlSaludo extends MIDlet implements CommandListener { private final String URL = getAppProperty("URL-SALUDO"); private final Display display = Display.getDisplay(this); private final Command cmdEnviar = new Command("Enviar", Command.SCREEN, 1); private final Command cmdLimpiar = new Command("Limpiar", Command.SCREEN, 1); private final Command cmdSalir = new Command("Salir", Command.EXIT, 1); private final TextBox texto = new TextBox("Ejemplo Http", "", 400, TextField.ANY); { texto.addCommand(cmdEnviar); texto.addCommand(cmdLimpiar); texto.addCommand(cmdSalir); texto.setCommandListener(this); } public void startApp() { display.setCurrent(texto); System.out.println(URL); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command c, Displayable d) { if (c == cmdEnviar) { //selecciona enviar envia(); } else if (c == cmdLimpiar) { //selecciona limpiar limpia(); } else if (c == cmdSalir) { //selecciona salir termina(); } } private void envia() { HttpConnection c = null; DataInputStream dis = null;

48

49
try { c = (HttpConnection) Connector.open(URL + "?nombre=" + texto.getString()); c.setRequestMethod(HttpConnection.GET); c.setRequestProperty("Accept", "text/plain"); /* Al momento de obtener la longitud de la respuesta o el InputStream, se enva * la solicitud y se leen los encabezados de la respuesta, los cuales se guardan * hasta que se solicitan. */ long longResp = c.getLength(); dis = c.openDataInputStream(); int e = 0; String valor; mensaje("RESPUESTA. "); mensaje("Longitud: " + longResp); mensaje("Encabezados: "); while ((valor = c.getHeaderField(e)) != null) { mensaje(c.getHeaderFieldKey(e) + ' ' + valor); e++; } mensaje("Cdigo: " + c.getResponseCode()); mensaje("Texto: " + c.getResponseMessage()); String respuesta = dis.readUTF(); mensaje("Contenido: " + respuesta); } catch (ClassCastException ex) { mensaje(URL + "no es una URL de HTTP"); } catch (Exception ex) { error(ex); } finally { if (dis != null) { try { dis.close(); } catch (IOException ex) { error(ex); } } if (c != null){ try { c.close(); } catch (IOException ex) { error(ex); } } } } private void limpia() { texto.setString(""); } private void termina() {

49

50
destroyApp(false); notifyDestroyed(); } private void mensaje(final String txt) { texto.insert("\n" + txt, texto.size()); } private void error(Exception ex) { mensaje(ex.getMessage()); ex.printStackTrace(); } }

2. ServicioSaludoJava. En el servidor web. /* Hay que crear un proyecto WEB con un servlet llamado ServicioSaludoJava */
import java.io.DataOutputStream; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ServicioSaludoJava extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); String nombre = request.getParameter("nombre"); String saludo = "Hola "+nombre; DataOutputStream dos = new DataOutputStream(response.getOutputStream()); try{ dos.writeUTF(saludo); }finally{ dos.flush(); } } @Override public String getServletInfo() { return "Responde con un saludo DataOutputStream. Versin 1.0." + Copyright 2011. M. en C. RICARDO ARMANDO MACHORRO REYES; } }

50

Potrebbero piacerti anche