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