programa expresso de capacitação módulo j2me

76
Programa Expresso de Capacitação Módulo J2ME Aula 3 – MIDP

Upload: luis-michelon

Post on 09-Apr-2016

216 views

Category:

Documents


0 download

DESCRIPTION

Programa Expresso de Capacitação Módulo J2ME

TRANSCRIPT

Programa Expresso de Capacitação

Módulo J2ME

Aula 3 – MIDP

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• High-level API de Componentes de interface

com o usuário - javax.microeidtion.lcdui.*

Overview MIDP

• Elemento-chave no mundo J2ME• Junto com CLDC

• Conectividade• Interface gráfica rica

Relembrando...

• Mobile Information Device Profile• MIDP applications = MIDlets = CLDC + MIDP

MIDlets

• Componentes do MIDlet• JAD – usado pelo JAM. Possui informações a

respeito do JAR.• JAR – Código compilado, junto com recursos.

• Java Application Manager:• Software responsável por instalar, remover e

executar MIDlets• Dependente de dispositivo e de fabricante

• Mais de um MIDlet pode estar em um JAR.

Estrutura de um MIDletimport javax.microedition.midlet.MIDlet;

public class helloWorld extends MIDlet {

public helloWorld () {System.out.println("helloWorld()");

}

// obrigatorioprotected void startApp() {

System.out.println("startApp()");}

// obrigatorioprotected void pauseApp() {

System.out.println("pauseApp()");}

// obrigatorioprotected void destroyApp(boolean arg0) {

System.out.println("destroyApp()");}

}

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

Hierarquia de classes

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• Objeto único para cada MIDlet• Não é instanciado

Usando Display

import javax.microedition.lcdui.Display;import javax.microedition.midlet.MIDlet;

public class DisplayStats extends MIDlet {private Display display;

// construtor// construtorpublic DisplayStats() {display = Display.getDisplay(this);...}...}

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)• void setCurrent(Displayable d)• Mostra um objeto displayable

• int numColors()• Retorna o número de cores disponíveis

Displayable

• Objeto que pode ser visto num dispositivo• Screen

• Objetos Displayable para Interface alto nível

• Canvas• Canvas• Objetos Displayable para Interface

baixo nível

Voltando ao Diagrama ...

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);myTextBox = new TextBox("", "Hello World", 11, TextField.ANY);

}

public void startApp() {this.myDisplay.setCurrent(myTextBox);

}

public void pauseApp() {}

public void destroyApp(boolean unconditional) {}}

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

Tratamento de eventosTratamento de eventosInterface de alto nível

Overview

• Quadro geral• Objetos Command• Objetos Item• Command e CommandListener• Item e ItemStateListener• Item e ItemStateListener

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

Objetos Command

• Contém informações sobre um evento• Podem ser considerados como “botões”

• Soft keys• Teclas

• O processo de eventos1. Criação do Objeto Command1. Criação do Objeto Command2. Adicionar o comando a um Displayable3. Adicionar um receptor (Listener) ao Displayable

Objetos Command

• Command cmdExit = new Command(“exit”, Command.EXIT, 1)

• Argumentos• Nome para o comando• Constante (OK, EXIT, HELP, BACK, etc)• Prioridade

• Constante• 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

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

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º passofmMain.setCommandListener(this); // 3º passo...public void commandAction(Command c, Displayable s) {

if (c == cmExit) {destroyApp(true);notifyDestroyed();}

}

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 • “back” volta para a tela principal, após o usuário ter

visualizado a mensagem

Item

• Qualquer componente que possa ser adicionado a um objeto Form (ver diagrama de classes)

• Item é uma classe abstrata• Métodos • Métodos

• String getLabel ()• Void setLabel (String label)

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

Exemplo

// cria o objeto Item

df = new DateField("Data :", DateField.DATE);df.setDate(new java.util.Date());

// adiciona o objeto a um displayable

formMain.append(df);

// seta o receptor

formMain.setItemStateListener(this);

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()

Interface gráfica de alto nívelInterface gráfica de alto nível

Overview

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

Screen

• Classe progenitora • Descendente direta de Displayable• Métodos principais:

• String getTitle ()• void setTitle(String title)• void setTitle(String title)• Ticker getTicker () • void setTicker (Ticker t)

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)• void delete(int itemNum)• Item get (int itemNum) • int size ()

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)

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

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

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

StringItem - Exemploprivate Form fmMain; // formularioPrivate StringItem siLogin; // o objeto StringItem...fmMain = new Form(“PEC"); // instancia de FormsiLogin = newStringItem(“Login: ", “ela”); // StringItem...fmMain.append(siLogin); // adiciona Item (StringItem) ao Form......

Alternativa ao StringItem

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

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 • Exit: sai da aplicação em qualquer das “duas” telas

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?

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)

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 (); df.getDate (); // recupera a data atual

DateField

Gauge

• São basicamente indicadores de progresso de uma ação

• Existem dois modos de atualização• Interativo• Não-interativo

• Exemplos• Exemplos• Controle de volume• Progresso de download

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

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()

Gauge

TextField

• Caixa de texto para formulários• Suporta múltiplas linhas• Opção de filtrar a entrada de dados

• CONSTRAINT_MASK• ANY• EMAILADDR• NUMERIC• NUMERIC• PASSWORD• PHONENUMBER• URL

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

TextField - Exemplo// cria um novo TextField com máscara para número de telefone

tfPhone = new TextField("Phone:", "", 10, TextField.PHONENUMBER) ;

// recupera o textotf.getChars(arrayDestino);…// seta um Stringtf.setString(“Curso J2ME”);tf.setString(“Curso J2ME”);…

TextField

Choice e ChoiceGroup

• Choice: Interface que define os métodos para se manipular vários tipos de seleções predefinidas

• ChoiceGroup• Implementa Choice• Pode ser usado como CheckBox ou RadioButton

ChoiceGroup - Continuação

• Tipos• EXCLUSIVE• MULTIPLE

• Métodos principais:• ChoiceGroup(String label, int choiceType)• int append(String stringPart, Image imagePart)• void insert(int elementNum, String stringElement, Image • void insert(int elementNum, String stringElement, Image

imageElement)• getSelectedIndex()• boolean isSelected(int elementNum)

ChoiceGroup

Image

• Representa uma imagem a ser exibida no display do dispositivo

• Tipos• Imutável: pode ser usada diretamente no Form, nas

opções de um Choice ou em um Alert. • Mutável: mais flexível. Simplesmente um espaço de • Mutável: mais flexível. Simplesmente um espaço de

memória reservado em que poderá ser pintada a imagem

ImageItem

• Possibilita a exibição de uma imagem em um objeto Form

• A exibição depende da implementação do fabricante do dispositivo

• Métodos principais• ImageItem(String label, Image img, int layout, String altText)• ImageItem(String label, Image img, int layout, String altText)• ImageItem(String label, Image img, int layout, String altText)• void setImage(Image img)• void setLayout(int layout)

ImageItem – Exemplo...try {

Image img = Image.createImage(“/citi.png”);Image img2 = Image.createImage(“/bird.png”);

} catch (IOException ioe) { ... }...ImageItem imCiti = new ImageItem(null, img, ImageItem.LAYOUT_DEFAULT);...fmMain.append(imCiti);fmMain.append(imCiti);...fmMain.append(Img2);

List

• Semelhante a ChoiceGroup, entretanto não gera eventos de Item

• Possui mais um tipo que é IMPLICIT, não implementado por ChoiceGroup

• Não herda de Item, ao contrário de • Não herda de Item, ao contrário de ChoiceGroup

List - Continuação

• Métodos principais• List(String title, int listType)• int append(String stringPart, Image imagePart)• void delete(int elementNum)• int getSelectedIndex()• boolean isSelected(int elementNum)• int size()

List - Exemplo

• www/~ela/PEC/ListDemo.java

List

TextBox

• Caixa de texto que permite filtragem para certos tipos de caracteres

• Semelhante a TextField• Não herda de Item, ao contrário de TextField

TextBox

• Métodos principais:• TextBox (String title, String text, int maxSize, int

constraints)• void delete(int offset, int length)• void insert(String src, int position)• int getChars(char[] data)• int getChars(char[] data)• void setConstraints(int constraints)• int size()

TextBox - Exemplo

textBox tb;...// instância de TextBox

tb = new TextBox(“TextBox”,””,20,TextField.ANY);...// seta o display

display.setCurrent(tb);display.setCurrent(tb);…// recupera o texto

tb.getChars(arrayDestino);

TextBox

Exercitando ...

• Escreva um MIDlet que copia um texto de um TextBox para outro. O texto deverá ser selecionado pela posição do cursor

• Possui os seguintes comandos:• EXIT: termina a aplicação• COPY: copia o texto para outro TextBox• COPY: copia o texto para outro TextBox• BACK: volta para o TextBox da tela inicial

Alert

• Caixa de diálogo simples que possui uma imagem e um texto, ambos opcionais

• Objetos Command (“botões”) não podem ser adicionados ao objeto Alert

• A interatividade com o Alert fica a cargo do fabricante do dispositivo

• Tipos• Tipos• Modal• Timed

Alert - Continuação

• Pode ser usado diretamente por Display ou usado em conjunto com um Displayable

• Métodos principais:• Alert(String title, String alertText, Image alertImage,

AlertType at)• String getString()• void setString(String str)• int getTimeout()• void setTimeout(int time)

Alert

AlertType

• Classe especialmente útil• Encapsula informações sobre o Alert e

possibilita o suporte a som• Duas maneiras de se utilizar som

• O objeto Alert possuindo um AlertType • O objeto Alert possuindo um AlertType • Usando um método estático de AlertType

chamando playSound

AlertType

• Tipos• ALARM: usado para uma notificação• CONFIRMATION: confirmação de um evento ou

ação• ERROR: indica que um erro foi encontrado• INFO: indica em geral uma informação não-critíca • INFO: indica em geral uma informação não-critíca

ao usuário• WARNING: indica problemas potenciais

Alert - Exemplo

Form fmMain;Alert alerta;...// instancia os objetos

fmMain = new Form(“Tela principal”);alerta = new Alert(“INFO”, “CURSO J2ME”, null, AlertType.INFO);......// seta o alerta para ficar visível

display.setCurrent(alerta, fmMain);

Exercício

• Acrescente ao exercício de TextField um Alert ao abrir a aplicação antes da tela inicial e um Alert caso o par login e senha não seja igual a “adm” e “123” respectivamente.

Ticker

• Representa um texto que rola na tela• É atributo de Screen • Possui somente três métodos principais

• Ticker (String texto)• getString ()• getString ()• setString (String texto)

Ticker - Exemplo// o Ticker e o objeto Screen

Form fmMain;Ticker testTicker;...// instância do Ticker

testTicker = new Ticker(“Teste Ticker”);…// seta o Ticker do Form

fmMain.setTicker(testTicker);…

Referências

• Wireless Programming with J2ME: Cracking the code, ISBN: 0-7645-4885-9

• Tutoriais da Sun