Jornada de Cursos - J2ME Aula 3 – MIDP. Pausa para reflexão "Sem esforço não há progresso, mas...

75
Jornada de Cursos - J2ME Aula 3 – MIDP

Transcript of Jornada de Cursos - J2ME Aula 3 – MIDP. Pausa para reflexão "Sem esforço não há progresso, mas...

Page 1: Jornada de Cursos - 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 TokudaRyotan.

Jornada de Cursos - J2ME

Aula 3 – MIDP

Page 2: Jornada de Cursos - 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 TokudaRyotan.

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

Page 3: Jornada de Cursos - 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 TokudaRyotan.

Agenda• Overview MIDP• Tratamento de eventos• High-level API de Componentes de interface

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

Page 4: Jornada de Cursos - 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 TokudaRyotan.

Overview MIDP• Elemento-chave no mundo J2ME

• Junto com CLDC• Conectividade• Interface gráfica rica

Page 5: Jornada de Cursos - 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 TokudaRyotan.

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

Page 6: Jornada de Cursos - 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 TokudaRyotan.

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.

Page 7: Jornada de Cursos - 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 TokudaRyotan.

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

}

Page 8: Jornada de Cursos - 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 TokudaRyotan.

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

Page 9: Jornada de Cursos - 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 TokudaRyotan.

Hierarquia de classes

Page 10: Jornada de Cursos - 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 TokudaRyotan.

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

Page 11: Jornada de Cursos - 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 TokudaRyotan.

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

public class DisplayStats extends MIDlet {private Display display;

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

Page 12: Jornada de Cursos - 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 TokudaRyotan.

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

Page 13: Jornada de Cursos - 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 TokudaRyotan.

Displayable• Objeto que pode ser visto num dispositivo• Screen

• Objetos Displayable para Interface alto nível

• Canvas• Objetos Displayable para Interface baixo nível

Page 14: Jornada de Cursos - 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 TokudaRyotan.

Voltando ao Diagrama ...

Page 15: Jornada de Cursos - 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 TokudaRyotan.

Enfim um Hello Worldimport 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) {}}

Page 16: Jornada de Cursos - 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 TokudaRyotan.

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

Page 17: Jornada de Cursos - 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 TokudaRyotan.

Tratamento de eventosInterface de alto nível

Page 18: Jornada de Cursos - 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 TokudaRyotan.

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

Page 19: Jornada de Cursos - 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 TokudaRyotan.

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

Page 20: Jornada de Cursos - 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 TokudaRyotan.

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 Command2. Adicionar o comando a um Displayable3. Adicionar um receptor (Listener) ao Displayable

Page 21: Jornada de Cursos - 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 TokudaRyotan.

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

Page 22: Jornada de Cursos - 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 TokudaRyotan.

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

Page 23: Jornada de Cursos - 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 TokudaRyotan.

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

}

Page 24: Jornada de Cursos - 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 TokudaRyotan.

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

Page 25: Jornada de Cursos - 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 TokudaRyotan.

Interface gráfica de alto nível

Page 26: Jornada de Cursos - 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 TokudaRyotan.

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

Page 27: Jornada de Cursos - 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 TokudaRyotan.

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

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

Page 28: Jornada de Cursos - 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 TokudaRyotan.

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

Page 29: Jornada de Cursos - 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 TokudaRyotan.

Form - ExemploForm 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)

Page 30: Jornada de Cursos - 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 TokudaRyotan.

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

Page 31: Jornada de Cursos - 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 TokudaRyotan.

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)

Page 32: Jornada de Cursos - 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 TokudaRyotan.

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

Page 33: Jornada de Cursos - 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 TokudaRyotan.

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)...}

Page 34: Jornada de Cursos - 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 TokudaRyotan.

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

Page 35: Jornada de Cursos - 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 TokudaRyotan.

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

Page 36: Jornada de Cursos - 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 TokudaRyotan.

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

Page 37: Jornada de Cursos - 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 TokudaRyotan.

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

Page 38: Jornada de Cursos - 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 TokudaRyotan.

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

Page 39: Jornada de Cursos - 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 TokudaRyotan.

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?

Page 40: Jornada de Cursos - 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 TokudaRyotan.

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)

Page 41: Jornada de Cursos - 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 TokudaRyotan.

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

Page 42: Jornada de Cursos - 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 TokudaRyotan.

DateField

Page 43: Jornada de Cursos - 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 TokudaRyotan.

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

Page 44: Jornada de Cursos - 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 TokudaRyotan.

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

Page 45: Jornada de Cursos - 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 TokudaRyotan.

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

Page 46: Jornada de Cursos - 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 TokudaRyotan.

Gauge

Page 47: Jornada de Cursos - 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 TokudaRyotan.

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

Page 48: Jornada de Cursos - 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 TokudaRyotan.

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

Page 49: Jornada de Cursos - 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 TokudaRyotan.

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”);…

Page 50: Jornada de Cursos - 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 TokudaRyotan.

TextField

Page 51: Jornada de Cursos - 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 TokudaRyotan.

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

Page 52: Jornada de Cursos - 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 TokudaRyotan.

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

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

Page 53: Jornada de Cursos - 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 TokudaRyotan.

ChoiceGroup

Page 54: Jornada de Cursos - 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 TokudaRyotan.

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 memória reservado em que poderá ser pintada a imagem

Page 55: Jornada de Cursos - 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 TokudaRyotan.

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)• void setImage(Image img)• void setLayout(int layout)

Page 56: Jornada de Cursos - 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 TokudaRyotan.

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

Page 57: Jornada de Cursos - 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 TokudaRyotan.

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

ChoiceGroup

Page 58: Jornada de Cursos - 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 TokudaRyotan.

List

Page 59: Jornada de Cursos - 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 TokudaRyotan.

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

Page 60: Jornada de Cursos - 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 TokudaRyotan.

List - Exercício• Utilize a classe List para criar uma lista de

compras num supermercado. Utilize uma List do tipo Multiple.

Page 61: Jornada de Cursos - 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 TokudaRyotan.

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

Page 62: Jornada de Cursos - 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 TokudaRyotan.

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)• void setConstraints(int constraints)• int size()

Page 63: Jornada de Cursos - 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 TokudaRyotan.

TextBox - ExemplotextBox tb;...// instância de TextBox

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

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

tb.getChars(arrayDestino);

Page 64: Jornada de Cursos - 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 TokudaRyotan.

TextBox

Page 65: Jornada de Cursos - 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 TokudaRyotan.

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• BACK: volta para o TextBox da tela inicial

Page 66: Jornada de Cursos - 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 TokudaRyotan.

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

• Modal• Timed

Page 67: Jornada de Cursos - 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 TokudaRyotan.

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)

Page 68: Jornada de Cursos - 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 TokudaRyotan.

Alert

Page 69: Jornada de Cursos - 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 TokudaRyotan.

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 • Usando um método estático de AlertType

chamando playSound

Page 70: Jornada de Cursos - 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 TokudaRyotan.

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

ao usuário• WARNING: indica problemas potenciais

Page 71: Jornada de Cursos - 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 TokudaRyotan.

Alert - ExemploForm fmMain;Alert alerta;...// instancia os objetosfmMain = new Form(“Tela principal”);alerta = new Alert(“INFO”, “CURSO J2ME”, null, AlertType.INFO);...// seta o alerta para ficar visíveldisplay.setCurrent(alerta, fmMain);

Page 72: Jornada de Cursos - 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 TokudaRyotan.

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.

Page 73: Jornada de Cursos - 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 TokudaRyotan.

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

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

Page 74: Jornada de Cursos - 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 TokudaRyotan.

Ticker - Exemplo// o Ticker e o objeto ScreenForm fmMain;Ticker testTicker;...// instância do TickertestTicker = new Ticker(“Teste Ticker”);…// seta o Ticker do FormfmMain.setTicker(testTicker);…

Page 75: Jornada de Cursos - 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 TokudaRyotan.

Referências• Wireless Programming with J2ME: Cracking the

code, ISBN: 0-7645-4885-9• http://www.java.sun.com/j2me