63
Seminários .reply JavaME César Delmas – [email protected] Hially Sá – [email protected]

Seminários.reply JavaME César Delmas – [email protected] Hially Sá – [email protected]

Embed Size (px)

Citation preview

Page 1: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

Seminários .replyJavaME

César Delmas – [email protected] Hially Sá – [email protected]

Page 2: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

Agenda

Arquitetura (Revisão)MIDlet (Revisão)Hierarquia de classesScreenEventos

Page 3: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

Arquitetura - Configurações

Parte “low level” Define requisitos de hardware Especificação para JVM Geralmente divide os dispositivos segundo

memória, poder de processamento, display, conectividade

Exemplos: CLDC (Connected Limited Device Configuration) CDC (Connected Devide Configuration)

Page 4: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

Arquitetura - Profiles

Parte “high level”Extensão da configuraçãoProvê bibliotecas para implementação de

aplicações para um dado tipo de dispositivo

Exemplo: MIDP (Mobile Information Device Profile)

Page 5: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

Arquitetura – Pacotes Opcionaisacho q a gente pode melhorar esse slide

Pacotes opcionais CLDC ou CDC Específicos Modulares Exemplos

Conexão com BD, Envio de mensagens, Webservices, Bluetooth, Multimídia, kSOAP, kXML, Mail4ME...

Page 6: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

Arquitetura - Esquemático

Page 7: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

MIDlet - Conceitos

Midlets são aplicações móveis em Java

Classe abstrata a ser implementada

Page 8: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

MIDlet - Estruturaimport javax.microedition.midlet.MIDlet;

public class helloWorld extends MIDlet {

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

protected void startApp() {System.out.println("startApp()");}

protected void pauseApp() {System.out.println("pauseApp()");}

protected void destroyApp(boolean arg0) {System.out.println("destroyApp()");}

}

Page 9: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

MIDlet – Ciclo de Vida

Page 10: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

MIDP – Hierarquia de classes

Page 11: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

Display

Gerenciador de tela que controla o que é mostrado no dispositivo e quando

Recupera informações sobre a tela atual (cores suportadas, resolução, etc)

Objeto único para cada MIDletNão é instanciado

Page 12: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

Usando o Displaypublic class DisplayStats extends MIDlet {private Display display;

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

Page 13: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

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

Page 14: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

Display – métodos principais

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

boolean vibrate(int duration) Ordena ou não a vibração do aparelho(midp

2.0) boolean flashBackLight(int duration)

Ordena ou não que a luz do aparelho acenda(midp 2.0)

Page 15: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

Displayable

Objeto que pode ser visto num dispositivoScreen

Objetos Displayable para Interface alto nível

CanvasObjetos Displayable para Interface baixo

nível

Page 16: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

Displayable

Screen TextBox List Alert Form (ChoiceGroup, DateField, TextField,

Gauge, ImageItem, StringItem) OBS: ticker – variável que pode estar ou não

num Displayable;

Page 17: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

TextBox - Conceitos

Caixa de texto que permite filtragem para certos tipos de caracteres

Semelhante a TextFieldNão herda de Item, ao contrário de

TextField

Page 18: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

TextBox - Métodos

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 19: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

TextBox - Exemplopublic class classeJavaME extends MIDlet{

private Display display;private TextBox tb;

// Construtorpublic classeJavaME() {display = Display.getDisplay(this);tb = new TextBox("",“Exemplo - TextBox",11,0);} // seta o display protected void startApp() {this.display.setCurrent(tb);}

}

Page 20: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

TextBox - Protótipos

Page 21: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

List - Conceitos

Implementa a interface Choice Screen utilizados para mostrar uma lista de

opções Tipos:

ECLUSIVE MULTIPLE IMPLICIT (Não tem em ChoiceGroup)

Page 22: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

List - Métodos

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 23: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

List - Exemplopublic class classeJavaME extends MIDlet{

private Display display;private List list;

// Construtorpublic classeJavaME() {display = Display.getDisplay(this);list = new List(“Exemplo - Lista",“List.IMPLICIT",11,0);this.list.append("carro",null);this.list.append("navio",null);this.list.append("aviao",null);} // seta o display protected void startApp() {this.display.setCurrent(list);}

}

Page 24: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

List - Protótipo

Page 25: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

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 26: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

Alert - ContinuaçãoPode ser usado diretamente por Display ou

usado em conjunto com um DisplayableMétodos principais:

Alert(String title, String alertText, Image alertImage, AlertType at)

String getString() void setString(String str) int getTimeout() void setTimeout(int time)

Page 27: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

Alert

Page 28: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

AlertType

Classe especialmente útilEncapsula informações sobre o Alert

e possibilita o suporte a somDuas maneiras de se utilizar som

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

AlertType chamando playSound

Page 29: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

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 30: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

Alert - Exemplopublic class classeJavaME extends MIDlet{

private Display display;private Alert alert;private Form form = new Form(“Formulário”);

// Construtorpublic classeJavaME() { display = Display.getDisplay(this); alert = new Alert("Alerta","Perigo!!!", null, AlertType.WARNING); alert.setTimeout(3000);} // seta o display protected void startApp() {

this.display.setCurrent(alert, form);}

…}

Page 31: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

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 32: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

Ticker - Exemplopublic class classeJavaME extends MIDlet{

private Display display;private Form form = new Form(“Formulário”);private Ticker testTicker;

// Construtorpublic classeJavaME() { display = Display.getDisplay(this); ticker = new Ticker("Teste Ticker"); form.setTicker(testTicker);} // seta o display protected void startApp() {this.display.setCurrent(form);}

…}

Page 33: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

Ticker - Protótipo

Page 34: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

Form

Item ChoiceGroup, DateField, TextField, Gauge, ImageItem, StringItem

Page 35: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

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 Tipos: EXCLUSIVE e MULTIPLE

Page 36: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

ChoiceGroup - Métodos

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 37: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

ChoiceGroup - Exemplopublic class classeJavaME extends MIDlet{

private Display display = Display.getDisplay(this);private Form form = new Form(“Formulário”);private ChoiceGroup choice = new ChoiceGroup("Choice",Choice.EXCLUSIVE);

// Construtorpublic classeJavaME() { choice.append("choice 1", null); choice.append("choice 2", null); choice.append("choice 3", null); form.append(choice);} // seta o display protected void startApp() {this.display.setCurrent(form);}…

}

Page 38: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

ChoiceGroup - Protótipo

Page 39: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

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 40: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

Datefield - Exemplopublic class classeJavaME extends MIDlet{

private Display display = Display.getDisplay(this);private Form form = new Form(“Formulário”);

// Construtorpublic classeJavaME() {

DateField df = new DateField("Data: ", DateField.DATE); Date dataAtual = new Date(); df.setDate(dataAtual); form.append(df);} // seta o display protected void startApp() {

this.display.setCurrent(form);}

…}

Page 41: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

DateField - Protótipo

Page 42: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

TextFieldCaixa de texto para formuláriosSuporta múltiplas linhasOpção de filtrar a entrada de dados

CONSTRAINT_MASK ANY EMAILADDR NUMERIC PASSWORD PHONENUMBER URL

Page 43: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

TextField - Métodos

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 44: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

TextField - Exemplopublic class classeJavaME extends MIDlet{

private Display display = Display.getDisplay(this);private Form form = new Form(“Formulário”);

// Construtorpublic classeJavaME() {TextField tf = new TextField("Texto", "Oi", 30, TextField.ANY); form.append(tf);} // seta o display protected void startApp() {this.display.setCurrent(form);}

…}

Page 45: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

TextField - Protótipo

Page 46: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

Gauge

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

Existem dois modos de atualizaçãoInterativoNão-interativo

ExemplosControle de volumeProgresso de download

Page 47: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

Gauge – Métodos

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 Boolean isInteractive() – Verifica se é interativo

Page 48: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

Gauge - Exemplopublic class classeJavaME extends MIDlet{

private Display display = Display.getDisplay(this);private Form form = new Form(“Formulário”);

// Construtorpublic classeJavaME() {

Gauge gauge = new Gauge(“Gauge", true, 50, 11); form.append(gauge);} // seta o display protected void startApp() {

this.display.setCurrent(form);}

…}

Page 49: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

Gauge - Protótipo

Page 50: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

Image - Conceito

Representa uma imagem a ser exibida no display do dispositivo

TiposImutá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 51: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

ImageItem - Conceitos

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

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

Page 52: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

ImageItem - Métodos

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 53: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

ImageItem – Exemplopublic class classeJavaME extends MIDlet{

private Display display = Display.getDisplay(this);private Form form = new Form(“Formulário”);

// Construtorpublic classeJavaME() {

try {Image image = Image.createImage("/java.png");ImageItem item = new ImageItem(null, image, ImageItem.LAYOUT_CENTER, null);form.append(item); } catch (IOException e) {e.printStackTrace(); } } // seta o display protected void startApp() {this.display.setCurrent(form);}…}

Page 54: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

ImageItem - Protótipo

Page 55: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

StringItem

Rótulo estático e mensagem de textoNão é editávelNão reconhece eventosMé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 56: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

StringItem - Exemplopublic class classeJavaME extends MIDlet{

private Display display = Display.getDisplay(this);private Form form = new Form(“Formulário”);

// Construtorpublic classeJavaME() {

StringItem si = new StringItem("String :", "texto"); form.append(si);} // seta o display protected void startApp() {

this.display.setCurrent(form);}

…}

Page 57: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

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

Page 58: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

Quadro geral - eventos

Eventos são essenciais para MIDlets, pois são chave para interatividade

Para gerenciarmos um evento: Hardware reconhece o evento físico software é notificado do evento evento é tratado pelo programador

Page 59: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

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 60: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

Objetos CommandCommand 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 61: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

CommandListener

É o “receptor” de um comandoMétodo a ser sobrescrito:

commandAction (Command c, Displayable d ) Em commandAction é definido como o aplicativo

deve se comportar quando um evento é disparado

Page 62: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

Command - Exemploprivate Form fmMain; private Command cmExit;fmMain = new Form(“Formulário"); ...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 63: Seminários.reply JavaME César Delmas – cadcn@cin.ufpe.br Hially Sá – hrs@cin.ufpe.br

Exercitando ...

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