J2ME/Lições/CommandListener

Origem: Wikilivros, livros abertos por um mundo aberto.

Agora entraremos na parte interativa onde o usuário pode interagir com as funções do celular através do teclado ou da caneta digital.

Estrutura básica do CommandListener[editar | editar código-fonte]

Antes de trabalharmos para receber comandos, na nossa classe Midlet precisamos implementar a classe CommandListener.

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

public class MinhaClasse extends MIDlet implements CommandListener{
    Display meuDisplay = Display.getDisplay(this);
    
    public void startApp() {
    }
    public void pauseApp() {
    }
    public void destroyApp(boolean unconditional) {
    }
}

Agora vamos inserir o método commandAction() que iremos usar diretamente para manipular as ações do teclado, esse método deverá sempre ter 2 parâmetros, o primeiro é o objeto da classe Command (que veremos logo após) e o outro é o objeto Displayable.

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

public class MinhaClasse extends MIDlet implements CommandListener{
    Display meuDisplay = Display.getDisplay(this);
    
    public void startApp() {
    }
    public void pauseApp() {
    }
    public void destroyApp(boolean unconditional) {
    }
    public void commandAction(Command pegarComando, Displayable pegarDisplay){
    }
}

Criando um comando[editar | editar código-fonte]

Para criar um comando primeiro precisamos intanciar uma variável do tipo Command.

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

public class MinhaClasse extends MIDlet implements CommandListener{
    Display meuDisplay = Display.getDisplay(this);
    
    Command meuComando;
    
    public void startApp() {
    }
    public void pauseApp() {
    }
    public void destroyApp(boolean unconditional) {
    }
    public void commandAction(Command pegarComando, Displayable pegarDisplay){
    }
}

Agora vamos criar o objeto Command, para isso vamos usar como parâmetro respectivamente: 1º o texto que será exibido na tela, 2º o tipo de comando e 3º a prioridade do comando.

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

public class MinhaClasse extends MIDlet implements CommandListener{
    Display meuDisplay = Display.getDisplay(this);
    
    Command meuComando = new Command("OK", Command.OK, 0);
    
    public void startApp() {
    }
    public void pauseApp() {
    }
    public void destroyApp(boolean unconditional) {
    }
    public void commandAction(Command pegarComando, Displayable pegarDisplay){
    }
}

Detectando a ação de um comando[editar | editar código-fonte]

Agora vamos para a parte prática, vamos detectar uma ação de comando pelo teclado do celular, já temos o objeto Command criado, agora vamos criar uma condição caso ele seja apertado.

Como vimos anteriormente é dentro do método commandAction() que fazemos os trabalhos com comandos, é através dos dos atributo do tipo Command que vamos fazer a comparação com o objeto Command externo que criamos, e vamos exibir uma mensagem no console.

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

public class MinhaClasse extends MIDlet implements CommandListener{
    Display meuDisplay = Display.getDisplay(this);
    
    Command meuComando = new Command("OK", Command.OK, 0);
    
    public void startApp() {
    }
    public void pauseApp() {
    }
    public void destroyApp(boolean unconditional) {
    }
    public void commandAction(Command pegarComando, Displayable pegarDisplay){
        if(pegarComando == meuComando){
            System.out.println("Pressionou o botão OK");
        }
    }
}

Agora calma, AINDA não vai acontecer nada quando apertarmos o botão, para isso precisamos criar a tela que irá "escutar" o comando que iremos colocar, podemos fazer a tela com qualquer objeto tipo Alert, TextBox, etc... no nosso caso vamos usar um simples Form.

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

public class MinhaClasse extends MIDlet implements CommandListener{
    Display meuDisplay = Display.getDisplay(this);
    
    Command meuComando = new Command("OK", Command.OK, 0);
    Form meuForm = new Form("Título do formulário");
    
    public void startApp() {
    }
    public void pauseApp() {
    }
    public void destroyApp(boolean unconditional) {
    }
    public void commandAction(Command pegarComando, Displayable pegarDisplay){
        if(pegarComando == meuComando){
            System.out.println("Pressionou o botão OK");
        }
    }
}

Agora dentro do método startApp() vamos adicionar o comando à tela do Form através do método addCommand().

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

public class MinhaClasse extends MIDlet implements CommandListener{
    Display meuDisplay = Display.getDisplay(this);
    
    Command meuComando = new Command("OK", Command.OK, 0);
    Form meuForm = new Form("Título do formulário");
    
    public void startApp() {
        meuForm.addCommand(meuComando);
    }
    public void pauseApp() {
    }
    public void destroyApp(boolean unconditional) {
    }
    public void commandAction(Command pegarComando, Displayable pegarDisplay){
        if(pegarComando == meuComando){
            System.out.println("Pressionou o botão OK");
        }
    }
}

Agora vamos adicionar o "escutador" no Form, para detectar se pressionamos ou não algum botão.

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

public class MinhaClasse extends MIDlet implements CommandListener{
    Display meuDisplay = Display.getDisplay(this);
    
    Command meuComando = new Command("OK", Command.OK, 0);
    Form meuForm = new Form("Título do formulário");
    
    public void startApp() {
        meuForm.addCommand(meuComando);
        meuForm.setCommandListener(this);
    }
    public void pauseApp() {
    }
    public void destroyApp(boolean unconditional) {
    }
    public void commandAction(Command pegarComando, Displayable pegarDisplay){
        if(pegarComando == meuComando){
            System.out.println("Pressionou o botão OK");
        }
    }
}

Por fim, colocamos normalmente o método setCurrent() da classe Display.

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

public class MinhaClasse extends MIDlet implements CommandListener{
    Display meuDisplay = Display.getDisplay(this);
    
    Command meuComando = new Command("OK", Command.OK, 0);
    Form meuForm = new Form("Título do formulário");
    
    public void startApp() {
        meuForm.addCommand(meuComando);
        meuForm.setCommandListener(this);
        meuDisplay.setCurrent(meuForm);
    }
    public void pauseApp() {
    }
    public void destroyApp(boolean unconditional) {
    }
    public void commandAction(Command pegarComando, Displayable pegarDisplay){
        if(pegarComando == meuComando){
            System.out.println("Pressionou o botão OK");
        }
    }
}