J2ME          J2ME Desenvolvimento  Leonardo Melo Santos  leonardomelosantos@gmail.com
J2METópicos•••    Arquitetura e visão geral    JAD e JAR    MIDlet•   Ciclo de vida e estrutura de um MIDlet•   Interface ...
J2MEArquitetura e visão geral    MIDlet                1   1                          Display                             ...
J2MEMIDlet• Aplicativo Java para mobiles (J2ME + MIDP)  – Ponto de início/entrada de um aplicativo J2ME    instalado no di...
J2MECiclo de vida de um MIDlet                             construtor                                                     ...
J2MECiclo de vida de um MIDletAMS - Application Manegement Software  Software pré-instalado em dispositivos MIDP que funci...
J2MEEstrutura de um MIDletEsqueleto básicoimport javax.microedition.midlet.MIDlet;import javax.microedition.midlet.MIDletS...
J2MEEstrutura de um MIDletAdicionando o “ouvinte”import   javax.microedition.lcdui.Command;import   javax.microedition.lcd...
J2MEInterface gráfica - High-level API• Não permite desenhar na tela (como na Low-level  API, ou simplesmente Canvas);• De...
J2MEInterface gráfica - High-level APICommand       São botões que podem ser adicionados num Displayable.Construtores•Comm...
J2MEInterface gráfica - High-level APIAlert        Funciona como uma tela de aviso, com ou sem imagem.Construtores•Alert(S...
J2MEInterface gráfica - High-level APIAlert - Exemplo1.    import java.io.IOException;2.    import javax.microedition.lcdu...
J2MEInterface gráfica - High-level APITextBox              Tela que capta entrada de dados do usuário.Construtor•TextBox(S...
J2MEInterface gráfica - High-level APITextBox – Exemplo1.    import javax.microedition.lcdui.*;2.    import javax.microedi...
J2MEInterface gráfica - High-level APIList          Trata-se de uma tela com uma listagem. Existem três        tipos de li...
J2MEInterface gráfica - High-level APIList – Exemplo usando Command1.    import java.io.IOException;2.    import javax.mic...
J2MEInterface gráfica - High-level APIItens de um Form: TextField        Caixa de texto que comporta-se muito parecido com...
J2MEInterface gráfica - High-level APIItens de um Form: StringItem               Mostra dentro do Form um texto simples,  ...
J2MEInterface gráfica - High-level APIItens de um Form: ImageItem             Mostra uma imagem dentro de um formulário.Co...
J2MEInterface gráfica - High-level APIItens de um Form: DateField     Mostra dentro do Form um campo para inserir data e/o...
J2MEInterface gráfica - High-level APITextField, StringItem, ImageItem e Date – Exemplo1.    import java.io.IOException;2....
J2MEInterface gráfica - High-level APIItens de um Form: ChoiceGroup     Lista de escolha múltipla ou exclusiva. Também per...
J2MEInterface gráfica - High-level APIChoiceGroup – Exemplo1.    import javax.microedition.lcdui.*;2.    import javax.micr...
J2MEInterface gráfica - High-level APIItens de um Form: Gauge Trata-se de uma barra de progresso. Existem dois tipos: o in...
J2MEInterface gráfica - High-level APIGauge – Exemplo com Command1.    import javax.microedition.lcdui.*;2.    import java...
J2ME  Dúvidas?
Próximos SlideShares
Carregando em…5
×

Curso de J2ME - Parte 03 - Desenvolvimento de aplicações

1.199 visualizações

Publicada em

Curso de J2ME - Parte 03 - Desenvolvimento de aplicações

Publicada em: Tecnologia
  • Seja o primeiro a comentar

Curso de J2ME - Parte 03 - Desenvolvimento de aplicações

  1. 1. J2ME J2ME Desenvolvimento Leonardo Melo Santos leonardomelosantos@gmail.com
  2. 2. J2METópicos••• Arquitetura e visão geral JAD e JAR MIDlet• Ciclo de vida e estrutura de um MIDlet• Interface gráfica – High-level API – Alert – TextBox – List – Form • TextField, DateField, StringItem e ImageItem • ChoiceGroup • Gauge
  3. 3. J2MEArquitetura e visão geral MIDlet 1 1 Display 1 * Displayable 1 * Command Screen Canvas high-level API’s low-level API’s * 1 Item Form TextBox List AlertChoiceGroup DateField Gauge ImageItem TextField StringItem
  4. 4. J2MEMIDlet• Aplicativo Java para mobiles (J2ME + MIDP) – Ponto de início/entrada de um aplicativo J2ME instalado no dispositivo. – Trata-se de uma classe Java que deve herdar de javax.microedition.midlet.MIDlet, e deve implemenetar três métodos abstratos: startApp(), pauseApp() e destroyApp(boolean); – Possui um conjunto de telas, e cada tela possui um conjunto de comandos. – Precisa saber quem é o “ouvinte” dos comandos acionados nas telas (um Listener). – Parecido com os Applets. – Apenas imagens PNG.
  5. 5. J2MECiclo de vida de um MIDlet construtor •Ativo – Onde é feita a Aquisição de recursos inicializando a execução. •Pausado – Liberação de recursos em um modo de Pausado Pausado espera, ou seja, pausado utilizado ao atender telefone, receber SMS dentre outra aplicação. ) p( () de Ap pp st tA se oyr •Destruído – Liberação de ar u A pa st todos os recursos. pp destroyApp() () Ativo Ativo Destruído Destruído
  6. 6. J2MECiclo de vida de um MIDletAMS - Application Manegement Software Software pré-instalado em dispositivos MIDP que funciona como um ambienteoperacional, e é responsável pela chamada dos métodos, startApp(), pauseApp() e destroyApp(), conforme o ciclo de vida visto acima. AMS MIDlet O construtor padrão do MIDLetCria uma nova instancia do MIDLet. (que está no estado pausado) é chamadoVai decidir o tempo apropriado para que o MIDLet seja executado. O MIDLet carrega todos osPara isso ele faz a chamada do método startApp para que o estado recursos necessários para quedo aplicativo seja mudado para ativo. ele seja executado.Faz com que o MIDlet reduza significativamente a quantidade de O MIDLet deixa de executar orecursos da memória que ele está consumindo, de forma que o serviço e escolhe algunsAMS pode ser usado temporariamente através de outras funções recursos mais necessários.no dispositivo como um telefonema ou rodando outro MIDlet . Se foi ordenado que sejaRecebe uma determinação de que o MIDlet não é mais necessário, finalizado, o MIDlet salva estadoassim o MIDlet que é candidato a ser destruído chama o método ou preferências de usuário epara auto-destruição, destroyApp. executa a limpeza.
  7. 7. J2MEEstrutura de um MIDletEsqueleto básicoimport javax.microedition.midlet.MIDlet;import javax.microedition.midlet.MIDletStateChangeException;public class DespesasMidlet extends MIDlet { protected void startApp() throws MIDletStateChangeException { } protected void pauseApp() { } protected void destroyApp(boolean incondicional) throws MIDletStateChangeException{ }}
  8. 8. J2MEEstrutura de um MIDletAdicionando o “ouvinte”import javax.microedition.lcdui.Command;import javax.microedition.lcdui.CommandListener;import javax.microedition.lcdui.Displayable;import javax.microedition.midlet.MIDlet;import javax.microedition.midlet.MIDletStateChangeException;public class DespesasMidlet extends MIDlet implements CommandListener { protected void startApp() throws MIDletStateChangeException { } protected void pauseApp() { } protected void destroyApp(boolean arg0) throws MIDletStateChangeException { } public void commandAction(Command comando, Displayable componente) { // Este método é executado sempre que um Command de um determinado // Displayable é acionado. Cada Displayable precisa saber quem é a classe // ouvinete. Neste caso, a classe ouvinete é this. }}
  9. 9. J2MEInterface gráfica - High-level API• Não permite desenhar na tela (como na Low-level API, ou simplesmente Canvas);• Definido pelo pacote javax.microedition.lcdui;• A aparência muda de acordo com o dispositivo;• Mostra um Displayable na tela por vez: – Display.getDisplay(meuMidlet).setCurrent(meuDisplayable) ;
  10. 10. J2MEInterface gráfica - High-level APICommand São botões que podem ser adicionados num Displayable.Construtores•Command(String rotulo, int tipoComando, int prioridade)•Command(String rotuloCurto, String rotuloLongo, int tipoComando, int prioridade)Tipos de Command•Command.BACK – Volta para uma tela anterior.•Command.CANCEL – Sai da operação antes de iniciar algo.•Command.EXIT – Faz com que o MIDlet termine todas as operações.•Command.HELP – Solicitação de ajuda.•Command.ITEM – Utiliza algum comando referente ao item do componente utilizado.•Command.OK – Solicita a confirmação do usuário para uma operação.•Command.SCREEN – Operação referente ao Display atual.•Command.STOP – Parar um processo.
  11. 11. J2MEInterface gráfica - High-level APIAlert Funciona como uma tela de aviso, com ou sem imagem.Construtores•Alert(String titulo)•Alert(String titulo, String texto, Image imagem, AlertType tipoAlerta)AlertType•AlertType.ALARM – Para mostrar um alerta sobre algo.•AlertType.CONFIRMATION – Para confirmação do usuário.•AlertType.ERROR – Para mostrar uma mensagem de Erro.•AlertType.INFO – Para mostrar alguma informação.•AlertType.WARNING – Mensagem de perigo.
  12. 12. J2MEInterface gráfica - High-level APIAlert - Exemplo1. import java.io.IOException;2. import javax.microedition.lcdui.*;3. import javax.microedition.midlet.*;4.5. public class MeuMidlet extends MIDlet implements CommandListener {6.7. private Alert meuAlert;8. private Command cmdOK;9.10. protected void startApp() throws MIDletStateChangeException {11. Image imagem = null; // Alert também aceita não possuir imagem12. try {13. imagem = Image.createImage("/carro.png"); // Pegando uma imagem14. } catch (IOException e) {15. e.printStackTrace(); // Não encontrou a imagem na raiz do projeto16. }17. cmdOK = new Command("OK", Command.SCREEN, 0); // Instanciando um comando18. meuAlert = new Alert("Título do Alert", "Mensagem do Alert com imagem.",19. imagem, AlertType.WARNING);20. meuAlert.addCommand(cmdOK); // Adicionando o Command ao Displayable21. meuAlert.setCommandListener(this); // Ouvinte é a própria classe22. Display.getDisplay(this).setCurrent(meuAlert); // Mostrando o Alert na tela23. }24.25. public void commandAction(Command comando, Displayable displayable) { }26.27. protected void destroyApp(boolean incondicional) throws MIDletStateChangeException { }28.29. protected void pauseApp() {}30.31. }
  13. 13. J2MEInterface gráfica - High-level APITextBox Tela que capta entrada de dados do usuário.Construtor•TextBox(String rotulo, String texto, int tamanhoMax, int constraints)Constraints•TextField.ANY•TextField.EMAILADDR•TextField.NUMERIC•TextField.PHONENUMBER•TextField.URL•TextField.DECIMAL•TextField.PASSWORD•TextField.UNEDITABLE•TextField.SENSITIVE•TextField.NON_PREDICTIVE•TextField.INITIAL_CAPS_WORD•TextField.INITIAL_CAPS_SENTENCE
  14. 14. J2MEInterface gráfica - High-level APITextBox – Exemplo1. import javax.microedition.lcdui.*;2. import javax.microedition.midlet.*;3.4. public class MeuMidlet extends MIDlet implements CommandListener {5.6. private TextBox meuTextBox;7. private Command cmdOK;8.9. protected void startApp() throws MIDletStateChangeException {10. cmdOK = new Command("OK", Command.SCREEN, 0); // Instanciando um comando11. meuTextBox = new TextBox("Apelido", "<apelido>", 8, TextField.ANY);12. meuTextBox.addCommand(cmdOK); // Adicionando o Command ao Displayable13. meuTextBox.setCommandListener(this); // Ouvinte é a própria classe14. Display.getDisplay(this).setCurrent(meuTextBox); // Mostrando o TextBox15. }16.17. public void commandAction(Command comando, Displayable displayable) { }18.19. protected void destroyApp(boolean incondicional) throws MIDletStateChangeException { }20.21. protected void pauseApp() {}22.23. }
  15. 15. J2MEInterface gráfica - High-level APIList Trata-se de uma tela com uma listagem. Existem três tipos de lista, e cada uma delas opcionalmente podemos inserir uma imagem por item.Construtor•List(String titulo, int tipoLista)•List(String titulo, int tipoLista, String[] listaStringsIniciais, Image[] listaImagensIniciais)Tipos de lista•List.IMPLICIT•List.EXCLUSIVE•List.MULTIPLE
  16. 16. J2MEInterface gráfica - High-level APIList – Exemplo usando Command1. import java.io.IOException;2. import javax.microedition.lcdui.*;3. import javax.microedition.midlet.*;4.5. public class MeuMidlet extends MIDlet implements CommandListener {6. private List minhaLista;7.8. protected void startApp() throws MIDletStateChangeException {9. Image imagem1 = null; Image imagem2 = null; Image imagem3 = null;10.11. try {12. imagem1 = Image.createImage("/animal1.png");13. imagem2 = Image.createImage("/animal2.png");14. imagem3 = Image.createImage("/animal3.png");15. } catch (IOException e) { }16.17. minhaLista = new List("Minha listagem", List.IMPLICIT); // List.EXCLUSIVE ou List.MULTIPLE18. minhaLista.append("Item 1", imagem1);19. minhaLista.append("Item 2", imagem2);20. minhaLista.append("SAIR", imagem3);21. minhaLista.setCommandListener(this); // Ouvinte é a própria classe22. Display.getDisplay(this).setCurrent(minhaLista); // Mostrando o List na tela23. }24.25. public void commandAction(Command comando, Displayable displayable) {26. if ((displayable == minhaLista) && (comando == List.SELECT_COMMAND)) {27. String elementoSelecionado = minhaLista.getString(minhaLista.getSelectedIndex());28. if (elementoSelecionado.equals("SAIR")) {29. notifyDestroyed(); // Quando selecionar a terceira e última opção, a aplicação finaliza30. }31. }32. }33.34. protected void destroyApp(boolean incondicional) throws MIDletStateChangeException { }35.36. protected void pauseApp() {}37. }
  17. 17. J2MEInterface gráfica - High-level APIItens de um Form: TextField Caixa de texto que comporta-se muito parecido com um TextBox, porém só pode ser usado dentro de um Form.Construtor•TextField(String rotulo, String texto, int tamanhoMax, int constraints)Constraints•TextField.ANY•TextField.EMAILADDR•TextField.NUMERIC•TextField.PHONENUMBER•TextField.URL•TextField.DECIMAL•TextField.PASSWORD•TextField.UNEDITABLE•TextField.SENSITIVE•TextField.NON_PREDICTIVE•TextField.INITIAL_CAPS_WORD•TextField.INITIAL_CAPS_SENTENCE
  18. 18. J2MEInterface gráfica - High-level APIItens de um Form: StringItem Mostra dentro do Form um texto simples, comportado-se como um rótulos apenas.Construtor•StringItem(String rotulo, String texto)•StringItem(String rotulo, String texto, int aparencia)Aparência•Item.PLAIN – Texto simples•Item.HYPERLINK – Em formato de Hyperlink•Item.BUTTON – Em foma de botão.
  19. 19. J2MEInterface gráfica - High-level APIItens de um Form: ImageItem Mostra uma imagem dentro de um formulário.Construtor•ImageItem(String rotulo, Image imagem, int layout, String texto)•ImageItem(String rotulo, Image imagem, int layout, String texto, int aparencia)Layout•Item.LAYOUT_CENTER•Item.LAYOUT_DEFAULT•Item.LAYOUT_LEFT•Item.LAYOUT_NEWLINE_AFTER•Item.LAYOUT_NEWLINE_BEFORE•Item.LAYOUT_RIGHT.Aparência•Item.PLAIN•Item.HYPERLINK•Item.BUTTON
  20. 20. J2MEInterface gráfica - High-level APIItens de um Form: DateField Mostra dentro do Form um campo para inserir data e/ou hora. Permite consultar o calendário nativo do dispositivo. Construtor •DateField(String rotulo, int modoExibicao) •DateField(String rotulo, int modoExibicao, TimeZone timeZone) Modo de exibição •DateField.DATE – Mostra apenas a data. •DateField.TIME – Mostra apenas a hora. •DateField.DATE_TIME – Mostra a data e a hora.
  21. 21. J2MEInterface gráfica - High-level APITextField, StringItem, ImageItem e Date – Exemplo1. import java.io.IOException;2. import javax.microedition.lcdui.*;3. import javax.microedition.midlet.*;4.5. public class MeuMidlet extends MIDlet implements CommandListener {6. private Form meuForm;7. private ImageItem imageItem;8. private DateField campoData;9. private TextField campoTexto;10. private StringItem stringItem;11.12. protected void startApp() throws MIDletStateChangeException {13. meuForm = new Form("Meu Formulário");14. Image imagem = null;15. try {16. imagem = Image.createImage("/animal2.png");17. } catch (IOException e) { }18. stringItem = new StringItem("Rótulo StringItem: ", "Valor do StringItem");19. imageItem = new ImageItem("Imagem: ", imagem, Item.LAYOUT_DEFAULT, "Texto da imagem");20. campoData = new DateField("Data: ", DateField.DATE);21. campoTexto = new TextField("Seu nome: ", "", 20, TextField.ANY);22. meuForm.append(stringItem); // Adicionando o StringItem ao formulário23. meuForm.append(imageItem); // Adicionando o ImageItem ao formulário24. meuForm.append(campoData); // Adicionando o DateField ao formulário25. meuForm.append(campoTexto); // Adicionando o TextField ao formulário26. meuForm.setCommandListener(this); // Ouvinte é a própria classe27. Display.getDisplay(this).setCurrent(meuForm); // Mostrando o Form na tela28. }29.30. public void commandAction(Command comando, Displayable displayable) { }31.32. protected void destroyApp(boolean incondicional) throws MIDletStateChangeException { }33.34. protected void pauseApp() {}35. }
  22. 22. J2MEInterface gráfica - High-level APIItens de um Form: ChoiceGroup Lista de escolha múltipla ou exclusiva. Também permite que cada elemento do grupo possua uma imagem.Construtor•ChoiceGroup(String rotulo, int tipoChoiceGroup)•ChoiceGroup(String rotulo, int tipoChoiceGroup, String[] listaDePalavras, Image[] listaDeImagens)Tipo de ChoiceGroup•Choice.EXCLUSIVE – Escolha exclusiva, não notifica o listener que este item foi selecionado.•Choice.MULTIPLE – Escolha múltipla, não notifica o listener que este(s) item(ns) foi(ram) selecionado(s).•Choice.POPUP – Escolha exclusive, mostra um item de cada vez.
  23. 23. J2MEInterface gráfica - High-level APIChoiceGroup – Exemplo1. import javax.microedition.lcdui.*;2. import javax.microedition.midlet.*;3.4. public class MeuMidlet extends MIDlet implements CommandListener {5. private Form meuForm;6. private ChoiceGroup grupoEscolhaEclusivo, grupoEscolhaMultiplo, grupoEscolhaPopup;7.8. protected void startApp() throws MIDletStateChangeException {9. grupoEscolhaEclusivo = new ChoiceGroup("Exclusivo", ChoiceGroup.EXCLUSIVE);10. grupoEscolhaEclusivo.append("Primeiro", null);11. grupoEscolhaEclusivo.append("Segundo", null);12. grupoEscolhaEclusivo.append("Terceitos", null);13. grupoEscolhaMultiplo = new ChoiceGroup("Multiplo", ChoiceGroup.MULTIPLE);14. grupoEscolhaMultiplo.append("Primeiro", null);15. grupoEscolhaMultiplo.append("Segundo", null);16. grupoEscolhaMultiplo.append("Terceitos", null);17. grupoEscolhaPopup = new ChoiceGroup("Popup", ChoiceGroup.POPUP);18. grupoEscolhaPopup.append("Primeiro", null);19. grupoEscolhaPopup.append("Segundo", null);20. grupoEscolhaPopup.append("Terceitos", null);21. meuForm = new Form("Meu Formulário");22. meuForm.append(grupoEscolhaMultiplo);23. meuForm.append(grupoEscolhaEclusivo);24. meuForm.append(grupoEscolhaPopup);25. meuForm.setCommandListener(this); // Ouvinte é a própria classe26. Display.getDisplay(this).setCurrent(meuForm); // Mostrando o Form na tela27. }28.29. public void commandAction(Command comando, Displayable displayable) { }30.31. protected void destroyApp(boolean incondicional) throws MIDletStateChangeException { }32.33. protected void pauseApp() {}}
  24. 24. J2MEInterface gráfica - High-level APIItens de um Form: Gauge Trata-se de uma barra de progresso. Existem dois tipos: o interativo onde o usuário pode alterá-lo e o não interativo, que tem o conteúdo alterado pela aplicação. São parecidos com Sliders.Construtor•Gauge(String rotulo, boolean interativo, int valorMaximo, int valorInicial)
  25. 25. J2MEInterface gráfica - High-level APIGauge – Exemplo com Command1. import javax.microedition.lcdui.*;2. import javax.microedition.midlet.*;3.4. public class MeuMidlet extends MIDlet implements CommandListener {5. private Form meuForm;6. private Gauge gaugeInterativo, gaugeNaoInterativo;7. private Command cmdIncrementar, cmdDecrementar;8.9. protected void startApp() throws MIDletStateChangeException {10. cmdIncrementar = new Command("Incrementar", Command.SCREEN, 0);11. cmdDecrementar = new Command("Decrementar", Command.SCREEN, 1);12. gaugeNaoInterativo = new Gauge("Não interativo: ", false, 100, 10);13. gaugeInterativo = new Gauge("Interativo: ", true, 100, 20);14. meuForm = new Form("Meu Formulário");15. meuForm.append(gaugeNaoInterativo); // Adicionando no fomulário o Gauge não-interativo16. meuForm.append(gaugeInterativo); // Adicionando no fomulário o Gauge interativo17. meuForm.addCommand(cmdIncrementar); // Adicionando o comando que incrementa o não-interatvo18. meuForm.addCommand(cmdDecrementar); // Adicionando o comando que decrementa o não-interatvo19. meuForm.setCommandListener(this); // Ouvinte é a própria classe20. Display.getDisplay(this).setCurrent(meuForm); // Mostrando o Form na tela21. }22.23. public void commandAction(Command comando, Displayable displayable) {24. if (displayable == meuForm) {25. if (comando == cmdIncrementar) {26. this.gaugeNaoInterativo.setValue(this.gaugeNaoInterativo.getValue() + 1);27. } else if (comando == cmdDecrementar) {28. this.gaugeNaoInterativo.setValue(this.gaugeNaoInterativo.getValue() - 1);29. }30. }31. }32.33. protected void destroyApp(boolean incondicional) throws MIDletStateChangeException { }34.35. protected void pauseApp() {}36.37. }
  26. 26. J2ME Dúvidas?

×