Ir al contenido principal

Creando un Menú Principal

Hoy un ejemplo de como crear un menú principal donde el usuario podrá navegar desde allí.

Lo primero es crear nuestro MIDlet, si todavía no conoces esto, te recomiendo que visites: Hola Mundo con Java ME y Comenzando con Java ME.

1 - Como toda aplicación en Java Me, primero creamos un atributo, Display y obtenemos la pantalla:


Display pantalla;
  
    public void startApp() {
        pantalla = Display.getDisplay(this);
    }


2 - Ahora creamos un atributo List y creamos una Lista Implicita:


Display pantalla;
    List menu;
  
    public void startApp() {
        pantalla = Display.getDisplay(this);
      
        menu = new List("Menu Principal", List.IMPLICIT);
    }


3 - Nos toca el turno de agregar los elementos a la lista, que serán nuestros items del menú Principal y mostrar este menú por pantalla:


menu = new List("Menu Principal", List.IMPLICIT);
menu.append("Iniciar Juego", null);
menu.append("Cargar Partida", null);
menu.append("Configuraciones", null);
menu.append("Ayuda", null);
menu.append("Salir", null);

pantalla.setCurrent(menu);


4 - Ya tenemos nuestro menú principal creado, pero todavía no tiene ninguna interacción, tendremos que obtener de alguna manera, el evento cuando el usuario hace clic en algún item del menú, para realizar esto debemos decirle al menú que intercepte este evento, esto lo hacemos:


menu.setCommandListener(this);


Este método configurara la clase que manejara este evento, normalmente se pone que la misma clase maneje el evento, pero podrían hacer que cualquier clase lo realice.

5 - Pero al escribir esa linea nos tirara error, es porque la clase para manejar eventos debe implementar la interface: CommandListener:


public class ClaseDosMidlet extends MIDlet implements CommandListener {

}


Solo debemos agregar implements, que se utiliza para implementar interfaces y el nombre de la clase que maneja el evento.

6 - Todavía siguen apareciendo errores, esto se debe a que a implementar una interface, esta contiene métodos obligatorios que debemos escribir, así que escribimos el siguiente método:


public void commandAction(Command c, Displayable d) {
      
}


Este metodo recibe por parametros:

* Command c : devuelve el comando que ha sido ejecutado.
* Displayable d : devuelve el objeto que se encontraba en pantalla en el momento que se realizo el evento.

7 - Así que dentro de commandAction, debemos primero preguntar si cuando se realizo el evento fue desde el menú, solo hacemos un if comparando el parámetro Displayable con nuestro menú. Y dentro de el un switch del menú y según que opción selecciono el usuario realizara lo que corresponda:


public void commandAction(Command c, Displayable d) {
        if(menu == d){
            switch(menu.getSelectedIndex()){
                case 0:
                    // Iniciar Juego
                    break;
                case 1:
                    // Cargar Partidas
                    break;
                case 2:
                    List nivel = new List("Elegir nivel", List.EXCLUSIVE);
                    nivel.append("Nivel 1", null);
                    nivel.append("Nivel 2", null);
                    nivel.append("Nivel 3", null);
                    nivel.append("Nivel 4", null);
                    nivel.append("Nivel 5", null);

                    pantalla.setCurrent(nivel);
                    break;
                case 3:
                    // Ayuda
                    break;
                case 4:
                    // Salimos de la Aplicacion
                    notifyDestroyed();
                    break;
            }
        }
    }


como pueden observar el switch, se realiza del case 0 al case 4, porque en nuestro menú solo existen 5 elementos, así que eso depende de la cantidad de opciones en el menú.
Dentro de cada Case, podemos hacer lo que sea, aquí le dejamos un pequeño ejemplo de como mostrar otro menú para seleccionar el nivel.

8 - Pero hay un problema al entrar a la opción Configuraciones que nos muestra el menú para elegir el nivel, no podemos volver al menú principal, así que lo primero sera crear un atributo:


Command volver;


Y dentro de startApp(): creamos nuestro comando volver:


volver = new Command("Volver", Command.BACK, 0);


La clase Command recibe por parámetro:

* Titulo : El titulo del comando
* Tipo: El tipo de Comando, se pueden elegir:

Command.BACK
Command.CANCEL
Command.EXIT
Command.HELP
Command.ITEM
Command.OK
Command.SCREEN
Command.STOP

* Prioridad : el nivel de prioridad

Nos queda setear a la lista nivel que se manejen los eventos y agregar nuestro comando volver:


nivel.setCommandListener(this);
nivel.addCommand(volver);


Desde ahora nuestro lista nivel, mostrara por pantalla el comando volver, pero todavía no realiza ninguna acción.

9 - Vamos a darle una acción al comando volver, nos dirigimos al método commandAction: y comparamos si el comando que se presiono es el comando volver:


if(volver == c){
      pantalla.setCurrent(menu);
}


Si el comando que se presiono es igual al comando volver, entonces volvemos a mostrar el menú principal.

Y así pudimos crear nuestro menú principal y manejar sus eventos.

Codigo Completo:


import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;

/**
 * @author matias
 */
public class ClaseDosMidlet extends MIDlet implements CommandListener {
    Display pantalla;
    List menu;
    Command volver;

    public void startApp() {
        pantalla = Display.getDisplay(this);

        volver = new Command("Volver", Command.BACK, 0);

        menu = new List("Menu Principal", List.IMPLICIT);
        menu.append("Iniciar Juego", null);
        menu.append("Cargar Partida", null);
        menu.append("Configuraciones", null);
        menu.append("Ayuda", null);
        menu.append("Salir", null);
      
        menu.setCommandListener(this);

        pantalla.setCurrent(menu);
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
    }

    public void commandAction(Command c, Displayable d) {
        if(volver == c){
            pantalla.setCurrent(menu);
        }else if(menu == d){
            switch(menu.getSelectedIndex()){
                case 0:
                    // Iniciar Juego
                    break;
                case 1:
                    // Cargar Partidas
                    break;
                case 2:
                    List nivel = new List("Elegir nivel", List.EXCLUSIVE);
                    nivel.append("Nivel 1", null);
                    nivel.append("Nivel 2", null);
                    nivel.append("Nivel 3", null);
                    nivel.append("Nivel 4", null);
                    nivel.append("Nivel 5", null);

                    nivel.setCommandListener(this);
                    nivel.addCommand(volver);

                    pantalla.setCurrent(nivel);
                    break;
                case 3:
                    // Ayuda
                    break;
                case 4:
                    // Salimos de la Aplicacion
                    notifyDestroyed();
                    break;
            }
        }
    }
}


Saludos...
Maty!

Comentarios

  1. Gracias, sigo haciendo el tuto , sirve muchisimo gracias!

    ResponderBorrar
  2. Como puedo ponerle a los items una imagen de fondo o efectos al ubicarse sobre???

    help!!!

    ResponderBorrar

Publicar un comentario

Entradas más populares de este blog

Leyendo los datos del Form

Buenas, hoy continuaremos nuestro ejemplo: Trabajando con la Clase Form . Ahora le agregamos alguna funcionalidad a nuestro formulario y mostraremos como obtener los datos que el usuario ingrese. 1 - Primero crearemos un atributo de Tipo: Command private Command guardar; 2 - Creamos nuestro Comando guardar: guardar = new Command("Guardar", Command.OK, 0); La clase Command recibe por parámetros:  * Titulo : El nombre del comando  * Tipo: El tipo de Comando podrás elegir entre: Command.BACK Command.CANCEL Command.EXIT Command.HELP Command.ITEM Command.OK Command.SCREEN Command.STOP Según tu comando deberás elegir el que mas corresponda con la acción de tu comando. 3 - Ahora tendremos que agregar nuestro comando al formulario, pero primero deberemos implementar la interface de CommandListener a nuestro MIDlet para que pueda recibir los comandos que agreguemos: public class ClaseTresMidlet extends MIDlet implements CommandListener Al im...

Hola Mundo con Java ME

Buenas... Hoy un pequeño tutorial para comenzar con NetBeans y observar como crear nuestra primer aplicación con JAVA ME. 1 - Abrimos NetBeans 2 - Vamos a Archivo -> Proyecto Nuevo (Ctrl + Mayus + N) 3 - Creamos un Proyecto de Tipo: Java ME -> Mobile Application y hacemos clic en Siguiente. 4 - Aqui definimos el Nombre de nuestro Proyecto y la ubicacion. Proyect Name (Nombre del Proyecto). Y dejamos solo la  casilla seleccionada de Set as Main Project. * Set as Main Project: El proyecto se fija como Principal * Create Hello MIDlet: Seleccionando esta casilla nos creara automáticamente un Hola Mundo, pero esta clase tendrá muchos componentes que por el momento no es necesario que lo sepan, además de tener mucho código y ya asustarlos de una xD. Hacemos clic en Siguiente. 5 - En este paso podremos elegir el Emulador con que probaremos nuestra aplicación y las configuraciones de la Aplicacion. Es recomendable seleccionar CLDC-1.1 y MIDP-2.0 ya que son los estándares que soportan...

Hola Mundo en Canvas

Buenas, después de varios días sin actualizar, disculpen fueron días de parciales y no tuve mucho tiempo para poder escribirles... Hoy les mostrare como iniciar su proyecto a bajo nivel, la forma de crear todo por nosotros mismos. 1 - Primero creamos un proyecto, y creamos un MIDlet vació. 2 - Creamos una Nueva clase de java: public class CanvasHolaMundo { } 3 - Hacemos que nuestra clase herede (extends) de Canvas: public class CanvasHolaMundo extends Canvas { } Deberán importar la librería: "import javax.microedition.lcdui.Canvas;", como logran ver solo anteponiendo la palabra "extends" y el nombre de la clase ya se logra hacer una herencia. 4 - Al heredar de Canvas esta clase nos obliga a crear un método: public class CanvasHolaMundo extends Canvas {     protected void paint(Graphics g) {            } } Este método paint recibe el objeto Graphics que nos permiti...