J2ME/Lições/CommandListener

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

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

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

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");
        }
    }
}