1. INTRODUCCIÓN
El código de a continuación sera una pantalla de autenticación de usuario (Login) el cual nos dara como resultado dos respuestas:
- Pantalla de bienvenida por que el usuario si existe
- Pantalla de error por que el usuario no existe
REFERENCIAR A UN POST DE COMPONENTES GRAFICOS EN J2ME
2. DESARROLLO
Creamos una nueva aplicación móvil en NetBeans (sino sabe como crear una nueva aplicación móvil puede ver el siguiente post Crear aplicación móvil J2ME desde cero con NetBeans)
//pantallas private Form formLogin; private Form formLoginOk; private Form formLoginError;
Definimos las dos cajas de texto a crear en la pantalla de Login y un StringItem que sera el mensaje a mostrar en el caso el usuario sea correcto o incorrecto.
//controles de pantalla private TextField txtUsuario; private TextField txtClave; private StringItem strMensaje;
Definimos los comandos o acciones a realizar sobre las pantallas (Command).
//comandos private Command cmdEntrar; private Command cmdSalir; private Command cmdAtras;
Definimos un método mostrarPantalla(Displayable nextDisplay), este nos recibe como parámetro la siguiente pantalla a mostrarse.
Ya hemos explicado que el DISPLAY es quien controla el posicionamiento de las pantallas actuales, mediante su método setCurrent.
public void mostrarPantalla(Displayable nextDisplay) { DISPLAY.setCurrent(nextDisplay); }
Definimos un método validarUsuario donde validamos los datos ingresados en las cajas de texto (TextField) contra unos datos en duro. En otros post lo validaremos con datos recuperados de un repositorio de datos (Base de datos, RecordStore, etc.)
//logica de validacion contra un usuario en duro public boolean validarUsuario() { String codigo = txtUsuario.getString(); String clave = txtClave.getString(); if (codigo.equals("hvasquez") && clave.equals("1234")) { return true; } return false; }
Dentro del CommandAction se tendrá la siguiente validación para indicarle a la aplicación que pantalla mostrar, previamente habiendo validado el usuario.
boolean existeUser = this.validarUsuario(); if (existeUser) { this.mostrarPantalla(construirPantallaLoginOk()); } else { this.mostrarPantalla(construirPantallaLoginError()); }
Los métodos construiPantallaXYZ, lo único que hacen es construir el objeto Form (new) y hacer append para agregar los Items a la pantalla, asimismo los addComand para agregar las acciones a la pantalla PONER LINK HACIA UN POS ANTERIOR DE ITEMS
CÓDIGO FUENTE
package edu.blogpm.midlets; import javax.microedition.midlet.*; import javax.microedition.lcdui.*; /** * @author SIEHP1 */ public class MidLogin extends MIDlet implements CommandListener { //recuperamos el objeto Display public final Display DISPLAY = Display.getDisplay(this); //pantallas private Form formLogin; private Form formLoginOk; private Form formLoginError; //controles de pantalla private TextField txtUsuario; private TextField txtClave; private StringItem strMensaje; //comandos private Command cmdEntrar; private Command cmdSalir; private Command cmdAtras; public MidLogin() { } public void startApp() { System.out.println("Midlet Iniciado"); this.mostrarPantalla(this.construyePantallaLogin()); } public void pauseApp() { System.out.println("Midlet Pausado"); } public void destroyApp(boolean unconditional) { System.out.println("Midlet Destruido"); } public void commandAction(Command c, Displayable s) { if (s == formLogin) { if (c == cmdEntrar) { boolean existeUser = this.validarUsuario(); if (existeUser) { this.mostrarPantalla(construirPantallaLoginOk()); } else { this.mostrarPantalla(construirPantallaLoginError()); } } else if (c == cmdSalir) { destroyApp(false); notifyDestroyed(); } } else if (s == formLoginOk) { if (c == cmdAtras) { this.mostrarPantalla(construyePantallaLogin()); } } else if (s == formLoginError) { if (c == cmdAtras) { this.mostrarPantalla(construyePantallaLogin()); } } } public Form construyePantallaLogin() { if (formLogin == null) { formLogin = new Form("Autenticar"); txtUsuario = new TextField("Usuario", null, 10, TextField.ANY); txtClave = new TextField("Clave", null, 10, TextField.NUMERIC | TextField.PASSWORD); cmdEntrar = new Command("Entrar", Command.OK, 1); cmdSalir = new Command("Salir", Command.EXIT, 2); formLogin.setCommandListener(this); formLogin.append(txtUsuario); formLogin.append(txtClave); formLogin.addCommand(cmdEntrar); formLogin.addCommand(cmdSalir); //DISPLAY.setCurrentItem(txtClave); } return formLogin; } public Form construirPantallaLoginOk() { if (formLoginOk == null) { formLoginOk = new Form("Ok"); cmdAtras = new Command("Atras", Command.BACK, 1); String usuario = txtUsuario.getString(); strMensaje = new StringItem("Bienvenido", usuario); formLoginOk.setCommandListener(this); formLoginOk.append(strMensaje); formLoginOk.addCommand(cmdAtras); } return formLoginOk; } public Form construirPantallaLoginError() { if (formLoginError == null) { formLoginError = new Form("Error"); cmdAtras = new Command("Atras", Command.BACK, 1); String usuario = txtUsuario.getString(); strMensaje = new StringItem("No existe el usuario", usuario); formLoginError.setCommandListener(this); formLoginError.append(strMensaje); formLoginError.addCommand(cmdAtras); } return formLoginError; } public void mostrarPantalla(Displayable nextDisplay) { DISPLAY.setCurrent(nextDisplay); } //logica de validacion contra un usuario en duro public boolean validarUsuario() { String codigo = txtUsuario.getString(); String clave = txtClave.getString(); if (codigo.equals("hvasquez") && clave.equals("1234")) { return true; } return false; } }
3. APLICACIÓN
Este ejemplo nos dará dos posibles resultados el Login OK o el Login ERRO y ambas pantallas me permiten ir hacia atrás, es decir a la pantalla del Login.
Comentarios
Publicar un comentario