1 / 75

Jornada de Cursos - J2ME

Aula 3 – MIDP. Jornada de Cursos - J2ME. Pausa para reflexão. "Sem esforço não há progresso, mas com esforço também não há progresso” Ryotan Tokuda , Mestre Zen. Agenda. Overview MIDP Tratamento de eventos

samuru
Télécharger la présentation

Jornada de Cursos - J2ME

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Aula 3 – MIDP Jornada de Cursos - J2ME

  2. Pausa para reflexão "Sem esforço não há progresso, mas com esforço também não há progresso” Ryotan Tokuda, Mestre Zen

  3. Agenda Overview MIDP Tratamento de eventos High-level API de Componentes de interface com o usuário - javax.microeidtion.lcdui.*

  4. Overview MIDP Elemento-chave no mundo J2ME Junto com CLDC Conectividade Interface gráfica rica

  5. Relembrando... Mobile Information Device Profile MIDP applications = MIDlets = CLDC + MIDP

  6. MIDlets Java Application Manager: Software responsável por instalar, remover e executar MIDlets Dependente de dispositivo e de fabricante Componentes do MIDlet JAD – usado pelo JAM. Possui informações a respeito do JAR. JAR – Código compilado, junto com recursos. Mais de um MIDlet pode estar em um JAR.

  7. Estrutura de um MIDlet import javax.microedition.midlet.MIDlet; public class helloWorld extends MIDlet { public helloWorld () { System.out.println("helloWorld()"); } // obrigatorio protected void startApp() { System.out.println("startApp()"); } // obrigatorio protected void pauseApp() { System.out.println("pauseApp()"); } // obrigatorio protected void destroyApp(boolean arg0){ System.out.println("destroyApp()"); } }

  8. Ciclo de vida de um MIDlet PAUSA Depois da chamada do construtor e antes da inicialização pelo JAM Durante o processo de execução ATIVO MIDlet em execução Durante o processo de execução DESTRUÍDO Desligada pelo JAM Libera todos os recursos alocados

  9. Hierarquia de classes

  10. Display Gerenciador de tela que controla o que é mostrado no dispositivo Recupera informações sobre a tela atual (cores suportadas, resolução, etc) Objeto único para cada MIDlet Não é instanciado

  11. Usando Display import javax.microedition.lcdui.Display; import javax.microedition.midlet.MIDlet; public class DisplayStats extends MIDlet { private Display display; // construtor public DisplayStats() { display = Display.getDisplay(this); ... } ... }

  12. Display – métodos principais static Display getDisplay(MIDlet m) Retorna o objeto display deste MIDlet Displayable getCurrent() Retorna o objeto displayable corrente void setCurrent(Displayable d) Mostra um objeto displayable int numColors() Retorna o número de cores disponíveis

  13. Displayable Objeto que pode ser visto num dispositivo Screen Objetos Displayable para Interface alto nível Canvas Objetos Displayable para Interface baixo nível

  14. Voltando ao Diagrama ...

  15. Enfim um Hello World import javax.microedition.lcdui.Display; import javax.microedition.lcdui.TextBox; import javax.microedition.midlet.MIDlet; public class HelloMIDlet extends MIDlet { private Display myDisplay; private TextBox myTextBox; public HelloMIDlet() { myDisplay = Display.getDisplay(this); myTextBox = new TextBox("", "Hello World", 11, TextField.ANY); } public void startApp() { this.myDisplay.setCurrent(myTextBox); } public void pauseApp() {} public void destroyApp(boolean unconditional) {} }

  16. Pausa para reflexão "Sem esforço não há progresso, mas com esforço também não há progresso” Ryotan Tokuda, Mestre Zen

  17. Interface de alto nível Tratamento de eventos

  18. Overview Quadro geral Objetos Command Objetos Item Command e CommandListener Item e ItemStateListener

  19. Quadro geral Eventos são essenciais para MIDlets, pois são chave para interatividade Para gerenciarmos um evento: O Hardware reconhece o evento físico O software é notificado do evento O evento é tratado pelo programador

  20. Objetos Command Contém informações sobre um evento Podem ser considerados como “botões” Soft keys Teclas O processo de eventos Criação do Objeto Command Adicionar o comando a um Displayable Adicionar um receptor (Listener) ao Displayable

  21. Objetos Command Command cmdExit = new Command(“exit”, Command.EXIT, 1) Argumentos Nome para o comando Constante (OK, EXIT, HELP, BACK, etc) Prioridade Constante Mapeia o posicionamento dos comandos na tela Depende da implementação do fabricante Prioridade Útil para a organização dos comandos em Menus e de botões de software na tela

  22. CommandListener É o “receptor” de um comando Método a ser sobrescrito: commandAction (Command c, Displayable d ) Em commandAction é definido como o aplicativo deve se comportar quando um evento é disparado

  23. Exemplo (faltam uns ajustes) Mão na massa: Classe Form é um Displayable private Form fmMain; private Command cmExit; fmMain = new Form(“Curso CITi"); ... cmExit = new Command("Exit", Command.EXIT, 1); // 1º passo ... fmMain.addCommand(cmExit); //2º passo fmMain.setCommandListener(this); // 3º passo ... public void commandAction(Command c, Displayable s) { if (c == cmExit) { destroyApp(true); notifyDestroyed(); } }

  24. Exercício Crie um MIDlet que contenha um Form e controle três botões: Form fmMain = new Form(“Tela Principal”); Lembre-se que Form é um objeto Displayable “exit”, usado para sair do MIDlet “hello” imprime “Hello World” “back” volta para a tela principal, após o usuário ter visualizado a mensagem

  25. Interface gráfica de alto nível

  26. Overview Screen Form Item StringItem DateField Gauge TextField Choice e ChoiceGroup Image e ImageItem List TextBox Alert e AlertType Ticker

  27. Screen Classe progenitora Descendente direta de Displayable Métodos principais: String getTitle () void setTitle(String title) Ticker getTicker () void setTicker (Ticker t)

  28. Form Container que armazena vários componentes que podem ser exibidos na tela Métodos principais: int append (Item item) int append (String texto) void delete(int itemNum) Item get (int itemNum) int size ()

  29. Form - Exemplo Form fm = new Form(“Formulario”); ... fm.append(item) // adiciona um item ... size = fm.size() // retorna o tamanho ... // seta o receptor para um evento com Item fm.setItemStateListener (ItemStateListener)

  30. Item Componente que pode ser adicionado a um objeto Form Subclasses ChoiceGroup, DateField , Gauge, ImageItem, StringItem, TextField ItemStateListener Interface a ser implementada para gerenciar eventos relacionados a Item

  31. Item Qualquer componente que possa ser adicionado a um objeto Form (ver diagrama de classes) Item é uma classe abstrata Métodos String getLabel () Void setLabel (String label)

  32. ItemStateListener O receptor de eventos relacionados a objetos Item Método a ser sobrescrito void itemStateChanged () No mesmo modelo dos objetos Command Este método é chamado quando o “item” tiver sofrido alteração que gere evento

  33. Item - Exemplo private Form fmMain; // formulario private DateField dfToday; // o objeto DateField ... fmMain = new Form(“My Form"); // instancia de Form dfToday = new DateField("Today:", DateField.DATE); // DateField ... fmMain.append(dfToday); // adiciona Item (DateField) ao Form fmMain.setItemStateListener(this); // Gerencia os eventos de Form ... public void itemStateChanged(Item item) { if (item == dfToday) ... }

  34. Exercício Crie um MIDlet com um DateField e que imprime “Item State Changed ...” quando seu estado é alterado Para esta implementação pode ser usado System.out.println()

  35. StringItem Rótulo estático e mensagem de texto Não é editável Não reconhece eventos Métodos principais: StringItem(String label, String text) String getText() – Obtém o valor atual do texto Void setText(String text) – Configura o novo valor do texto String getLabel() – Obtém o valor do rótulo

  36. StringItem - Exemplo private Form fmMain; // formulario Private StringItem siLogin; // o objeto StringItem ... fmMain = new Form(“Jornada CITI"); // instancia de Form siLogin = newStringItem(“Login: ", “ela”); // StringItem ... fmMain.append(siLogin); // adiciona Item (StringItem) ao Form ...

  37. Alternativa ao StringItem ... private Form fmMain; int i = fmMain.append(“Login: ela”); ... StringItem tmp = (StringItem) fmMain.get(i); ...

  38. Exercício Construa um MIDlet simples que possui dois botões (next e exit). Na primeira tela é exibido um StringItem com o label “Dados 1/2” e o texto “Nome: José” Next: passa para uma outra tela, onde o label é “Dados 2/2” e texto “Fone: 555-5555” Exit: sai da aplicação em qualquer das “duas” telas

  39. Exercitando ... Insira um texto (label) em um Form usando as duas maneiras aprendidas, em seguida recupere ambos na forma de StringItem e para cada um imprima no console o label e o texto. O que você conclui?

  40. DateField Objeto Item que manipula de forma simples tipos Date (java.util) Métodos principais: DateField (String label, int modo) Date getDate () void setDate(Date data)

  41. DateField - Exemplo // criação do objeto DateField DateField df = new DateField(“Data:”, DateField.DATE); ... java.util.Date dataAtual = new java.util.Date (); df.setDate(dataAtual); // seta a data do DateField … df.getDate (); // recupera a data atual

  42. DateField

  43. Gauge São basicamente indicadores de progresso de uma ação Existem dois modos de atualização Interativo Não-interativo Exemplos Controle de volume Progresso de download

  44. Gauge – Continuação Métodos Principais Gauge(String label, boolean interactive, int maxValue, int initialValue) - Construtor int getValue() – Obtém o valor atual do medidor void setValue(int value) – Configura o novo valor do medidor Void setMaxValue(int maxValue) – Configura o novo valor máximo

  45. Gauge - Exemplo // Gauge interativo Gauge gInt = new Gauge(“Volume”, true, 20,2) Gauge nInt = new Gauge(“Volume”,false, 20,2) ... // Seta um valor qualquer gInt.setValue(10) nInt.setVaule(20) // Retorna o valor atual gInt.getValue() nInt.getValue()

  46. Gauge

  47. TextField Caixa de texto para formulários Suporta múltiplas linhas Opção de filtrar a entrada de dados CONSTRAINT_MASK ANY EMAILADDR NUMERIC PASSWORD PHONENUMBER URL

  48. TextField - Continuação Métodos principais TextField (String label, String text, int max, int constraints) void delete(int offset, int length) int getChars(char[] data) void insert(String src, int position) String getString() int getConstraints() * int size() * Usado com CONSTRAINT_MASK

  49. TextField - Exemplo // cria um novo TextField com máscara para número de telefone tfPhone = new TextField("Phone:", "", 10, TextField.PHONENUMBER); … // recupera o texto tf.getChars(arrayDestino); … // seta um String tf.setString(“Curso J2ME”); …

  50. TextField

More Related