Vous êtes sur la page 1sur 93

INTRODUÇÃO A J2ME

Prof. Dany Sanchez Dominguez


y@
dany@labbi.uesc.br
NBCGIB – Sala 01

Semana de Informática da UESC


Setembro - 2010

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 1


Tema 2

Interface de Alto Nível

Semana de Informática da UESC


Setembro - 2010

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 2


Sumário - 1
• Introdução
• A classe Display
• A classe Command
• Eventos e listeners
• A classe Item
• Hierarquia da classe Display

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 3


Introdução
ç
• A interface de usuário ((GUI)) é um conjunto
j
de rotinas que:
ƒ mostram informação na tela,
ƒ inquire ao usuário sobre uma tarefa,
tarefa
ƒp
processa as respostas
p do usuário.

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 4


Introdução
ç
• Características da J2SE GUI
ƒ AWT / Swing
S i (Diversos
(Di elementos
l t gráficos)
áfi )
ƒ Múltiplas janelas
ƒ M d l de
Modelo d eventos
t complexo
l
ƒ Assume um apontador como dispositivo de
entrada
• Características da J2ME GUI
• LCDUI (Poucos elementos gráficos)
• Única janela
• Modelo de eventos simplificado
• Entrada de Dados: Teclado do telefone celular

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 5


Introdução
ç
• Existem três tipos
p de interface em J2ME:
ƒ Comandos
ƒ Formulários
ƒ Canvas (tela)
• Comandos
ƒ Instancias da classe Command,
ƒ Botões do dispositivo para tarefas
específicas
específicas,
Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 6
Introdução
ç
• Formulários:
ƒ Uma instancia da classe Form que contêm
instancias derivadas da classe Item (text
(
field, radio button, check box, list)
ƒ Similar a um formulário HTML

• Canvas:
ƒ Uma instancia da classe canvas,
ƒ Permite ao desenvolvedor desenhar e
manip lar imagens.
manipular imagens
Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 7
Estratégias - Desenvolvimento de Interfaces
• Abstração
ƒ Especifica uma interface com usuário em termos
abstratos e delega para a implementação do MIDP
a criação e posicionamento dos elementos
gráficos concretos,
ƒ API de Alto-Nível
Alto Nível
• Descobrimento
ƒ A aplicação determina as características do
dispositivo em tempo de execução e configura a
interface com o usuário através de programação
g fonte,
no código
ƒ API de Baixo-Nível
Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 8
As classes de Interface

DESCOBRIMENTO

ABSTRAÇÃO

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 9


A classe Display
p y
• Permite a interação com a tela do dispositivo,
• Para mostrar uma informação na tela
devemos ter uma instancia Display,
• Cada MIDlet pode ter uma única instancia da
classe Display,
Display
• Uma referencia pode ser obtida através do
método getDisplay()
private Display display;
di l
display = Di
Display.getDisplay(this);
l tDi l (thi )
• Apenas objetos Displayable podem ser
mostrados.
Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 10
A classe Display
p y
• O Objeto Display pode fornecer informações
sobre as características do dispositivo:
ƒ boolean isColor() – Informações sobre o suporte
de cor no dispositivo,
ƒ int numColor() – Número de cores ou níveis de
cinza,
ƒ int numAlphalevel()
p () - Suporte
p a transparência
p e
opacidade de pixels,
• Permite ativar algumas funcionalidades padrão:
ƒ boolean flashBacklight(int duration) – Luz de fundo
ƒ boolean vibrate(int duration) – Vibração.
Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 11
A classe Display
p y
• Os elementos da interface de alto nível
seguem a seguinte hierarquia de classes:
Item StringItem
Displayable CheckBoxs
Screen List RadioButtons
Alert TextField
TextBox
• As instancias derivadas da classe Item não
são mostradas diretamente na tela,
tela
• Para mostrar um objeto na tela chamamos o
método
ét d setCurrent()
tC t() da
d classe
l Di l
Display,
• O objeto a ser mostrado é o parametro de
setCurrent();
Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 12
A classe Display
p y

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 13


A classe Display
p y
• Exemplo:
ƒ Ilustra o funcionamento da classe Display,
ƒ Verifica se um dispositivo tem suporte a
vários cores,,
ƒ Método isColor(),
ƒ MIDlet Name: Verifica_Cores_Dispositivo,
ƒ MIDlet Class: DisplayCheckColor,
DisplayCheckColor
ƒ Mostrar execução
ç em vários dispositivos.
p

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 14


Resumo - classe Display
Método Descrição
p yg
static Display getDisplay(MIDlet
p y( Retorna uma instancia da classe
midlet) Display
Displayable getCurrent() Retorna a instancia Displayable que
esta
t sendo
d mostrada
t d na ttela
l ddo
dispositivo
( p y
void setCurrent(Displayable Mostra uma instancia Displayable
p y na
displayable) tela do dispositivo
void setCurrent(Alert alert, Mostra um dialogo Alert e uma
Di l
Displayable
bl di
displayable)
l bl ) i t
instancia
i Displayable
Di l bl na tela
t l do
d
dispositivo
()
boolean isColor() Determina se o dispositivo
p tem
suporte a cores
int numColors() Retorna o numero de cores suportado
pelo dispositivo.
dispositivo

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 15


A classe Command
• Para criar uma instancia da classe Command
chamamos o construtor da classe,
classe
• Construtores:
Command(String label, int commandType, int priority)

Command(String label, String longLabel, int


commandType, int priority)

ƒ label - O texto associado ao botão


ƒ longLabel - Um texto longo associado ao botão
(opcional)
ƒ commandType - A semântica do botão
ƒ p
priority
y - Indica a p
prioridade p
para o p
posicionamento
do botão
Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 16
A classe Command
• Exemplo:
private
i t Command
C d cancel
l
cancel = new Command(“cancelar”, Command.CANCEL, 0);

• Tipos de comandos:
ƒ OK, Confirma uma seleção
ƒ CANCEL Cancela uma modificação
CANCEL,
ƒ BACK, Move para a tela anterior
ƒ STOP Para uma operação em curso
STOP,
ƒ HELP, Mostra instruções
ƒ SCREEN, Tipo genérico para ações específicas da
aplicação
ƒ EXIT,, Sai da aplicação
p ç
ƒ ITEM, Indica que o botão está associado à um item na tela
Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 17
A classe Command
• O posicionamento e apresentação dos
comandos é dependente da implementação,
implementação
• No emulador WTK e em muitos dispositivos,
comandos são associados aos dois soft
buttons,,
• Mas, só existem DOIS soft buttons...
• E se existirem mais comandos do que soft
buttons?
• Então, um comando será associado à um
botão e os demais comandos serão
agrupados em um menu.
Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 18
A classe Command
• Quem ficará com um soft button e quem irá para
o menu?
• Depende da combinação de:
Prioridade + Tipo + Ordem de Inserção,
Inserção
• A prioridade indica a importancia que da o
desenvolvedor a um determinado comando,
comando
• Um valor baixo (1) indica maior importancia que
um valor
l alto
l (5),
(5)
• O AMS pode ignorar as prioridades se detectar
conflitos,
• Não temos controle absoltuo sobre como os
comandos serão colocados em um dispositivo.
Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 19
Eventos em J2SE

Event Source Object Listener Li t


Listener

•Qualquer
Q l objeto
bj t capaz •Qualquer
Q l objeto
bj t que •Um
U conjunto
j t d
de
de gerar um evento e implemente a métodos abstratos
registrar objetos listener interface listener e que processam os
•Multicast
M lti t Event
E t Source
S que tenha
t h interesse
i t eventos
t gerados
d por
•Capaz de adicionar em processar o objetos Event Source
vários escutadores evento
•AddListener()

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 20


Eventos em J2ME
Event Source Object Listener Listener

•Um Objeto Displayable •Poucos objetos, • Eventos específicos:


•Unicast
Unicast Event Source •Uma
Uma MIDlet •commandAction()
commandAction()
•Define um único •itemStateChange()
escutador para os
eventos
•SetListener()

• Um objeto
j Displayable
p y dispara
p um evento toda
vez que um de seus comandos é acionado.
Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 21
A classe Command + Listener
• Sempre que utilizamos instancias da classe
Command devemos implementar uma interface
CommandListener,
• O CommandListener
C dLi t é notificado
tifi d quando
d o
usuário aciona um comando,
• Neste caso, o AMS chama o método
commandAction(),
• O método commandAction() recebe dois
parâmetros:
ƒ uma instancia da classe Command
ƒ uma instancia da classe Displayable
Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 22
A classe Command + Listener
• No corpo do commandAction() colocamos as
instruções para:
ƒ identificar o comando que realizou o evento,
ƒ realizar o processamento do evento.
public
bli void
id commandAction(Command
d ti (C d command,
d
Displayable displayable){
if (
(command == exit){
){
destroyApp(true);
notifyDestroyed();
}
}

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 23


A classe Command + Listener
• Exemplo:
ƒ Ilustra o funcionamento da classe
Command e o objeto Listener,
Listener
ƒ Mostra as mensagens
g de ajuda
j de uma
aplicação,
ƒ Utiliza múltiplas telas,
ƒ MIDlet Name: Mostrar_Ajuda_Online,
Mostrar Ajuda Online
ƒ MIDlet Class: OnlineHelp.
p

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 24


A classe Command + Listener
• Exemplo:
ƒ O código mostrado tem uma falha: se
estivermos na tela de Ajuda e pausarmos a
MIDlet, ao retornamos, a tela Principal é
mostrada.
ƒ Qual é o problema?
ƒ Como pode ser corrigido?
ƒ Exercício: Modifique o código de exemplo para
após
ó a Pausa
P a última
últi t l seja
tela j mostrada.
t d
Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 25
A classe Item
• A classe Item é derivada da classe formulario,
• Permite
P it adicionar
di i f
funcionalidades
i lid d a um
formulario ((interface g
gráfica),
)
• Permite gerenciar eventos em nossa
aplicação,
aplicação
• Para utilizarmos um elemento da classe Item:
ƒ declarar o elemento,
ƒ adicionar o elemento ao formulario,
formulario
ƒ gerenciar os eventos (listener).

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 26


A classe Item
• O usuário interage com a aplicação
modificando
difi d o estado
t d de
d objetos
bj t Item,
It
g
• Execto instancias ImageItem e StringItem
g
(estáticas),
• Para gerenciar os eventos
e entos provocados
pro ocados pela
mudança de estado devemos implementar
uma interface ItemStateListener(),
• O método itemStateChange() é invocado
quando uma mudança de estado é
provocada pelo usuário,
Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 27
A classe Item
• As instruções para manipular o cambio de
estado devem ser colocadas no método
itemStateChange(),
itemStateChange()
• Ambos os métodos itemStateChange()
g () e
commandAction() gerenciam eventos,
• Eles não podem ser utilizados em conjunto,
• O AMS chama de forma independente cada
um dos métodos.

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 28


A classe Item
• O estado de uma instancia da classe Item pode
ser modificado
difi d por:
ƒ uma ação do usuário, o método
itemStateChange() é invocado,
ƒ uma ação da aplicação
aplicação, o método
itemStateChange() NÃO é invocado,
• O método itemStateChange() é chamado
q
quando:
1. o estado do objeto item é modificado,
2 o foco abandona o objeto.
2. objeto
Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 29
A classe Item
• O método itemStateChange() recebe como
parâmetro
â t uma referencia
f i a um objeto
bj t da
d
classe Item,
• A referencia indica o objeto que foi modificado,
• Para processarmos os eventos provocados pelas
mudanças de estado uma interface
itemStateListener deve ser implementada,
• O listener deve ser associado a um objeto
j
Displayable usando o método
setItemStateListener()
setItemStateListener().
Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 30
A classe Item + Listener
• Exemplo:
ƒ Ilustra o uso de instancias da classe Item,
ƒ Mostra a manipulação de eventos
provocados p
p por mudanças
ç de estado,,
ƒ Ilustra o funcionamento de um grupo de
radio buttons
ƒ MIDlet Name: Radio_Group_Listener,
Radio Group Listener
ƒ MIDlet Class: MyItemListener.
y

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 31


Resumo de Interfaces Listener
• Comandos
void setCommandListener(CommandListener
commandlistener)

void commandAction(Command command,


Displayable displayable)

• Items
void setItemStateListener(ItemStateListener
itemstatelistener)

void itemStateChange(Item item)

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 32


Hierarquia da classe Display
public class Display
public abstract class Displayable
public abstract class Screen extends Displayable
public class Alert extends Screen
public class Form extends Screen
public class List extends Screen implements Choice
public abstract class Item
public class ChoiceGroup extends Item implements Choice
public class DateField extends Item
public
bli class
l T tFi ld extends
TextField t d Item
It
public class Gauge extends Item
public class ImageItem extends Item
p blic class StringItem extends
public e tends Item
public class TextBox extends Screen
public class Command
public class Ticker
public class Graphics
public interface Choice
public abstract class Canvas extends Displayable
public class Graphics

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 33


Hierarquia da classe Display
• Displayable: classe abstrata, qualquer objeto
que pode
d ser mostrado
t d na tela
t l do
d dispositivo
di iti é
derivado desta classe,
• Screen: classe abstrata, deriva as classes da
GUI de alto nível,
ní el
• Alert: mostra uma caixa de dialogo com uma
mensagem (erro, notificação, informação),
• Form: Atua como contêiner para mostrar os
elementos derivados da classe Item,

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 34


Hierarquia da classe Display
• List: mostra uma lista de elementos, permite ao
usuário escolher uma opção,
opção
• TextBox: mostra um texto de múltiplas linhas na
tela,
• Item: classe abstrata,
abstrata deriva em 6 classes para
objetos de formulários,
• ChoiceGroup: utilizado para mostrar grupos de
radio buttons e check boxes,
boxes
• DateField: utilizada para manipular elementos
Data/Hora,
Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 35
Hierarquia da classe Display
• TextField: utilizada para manipular textos em
fórmularios,
fórmularios
• Gauge: utilizado para mostrar uma barra de
progresso,
• ImageItem: mostra uma imagem de um
arquivo,
• StringItem: mostra um texto na tela (estático)
• Command: um objeto que permite processar
comandos do usuário, podem ser associados a
outros objetos,
Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 36
Hierarquia da classe Display
• Ticker: mostra um texto animdao na tela
(rolagem de texto),
• Graphics: classe base para derivar objetos
(linhas, rectangle, circulos) que permitem criar
gráficos personalizados,
• Choice: uma interface que
q precisa
p ser
implementada nos objetos que mostram
opções
õ (radio
( di buttons
b tt e check
h k boxes).
b )

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 37


Sumário - 2
• A classe Alert
• A classe Form
• A classe ChoiceGroup
• A classe DateField
• A classe Gauge
• A classe StringItem
• A classe TextField
• A classe List
Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 38
A classe Alert
• Uma alerta mostra uma janela com uma
mensagem ao usuário,
• Para utilizarmos um objeto Alert devemos:
ƒ declarar
d l o objeto,
bj t
ƒ instanciar o objeto
j chamando o construtor,,
ƒ mostrar o objeto na tela.

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 39


A classe Alert
• Construtores:
Alert (String title)

Alert(String
l t(St i titl
title, St
String
i msg, Image i
img,
AlertType alerttype)

• titl
title – título
tít l da
d janela,
j l
• msg – mensagem ao usuário,
• img – imagem que aparece na janela
(opc o a )
(opcional)
• alerttype - o tipo da alerta, define o som a ser
emitido pelo alerta.
alerta
Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 40
A classe Alert
• Tipos de alerta:
Tipo Descrição
ALARM Uma requisição foi recebida
CONFIRMATION Um evento ou processamento foi finalizado
ERROR Um erro foi encontrado
INFO Uma informação é mostrada
WARNING Um erro potencial podera acontecer

• Uma janela de alerta não recebe nem


processa informações
i f õ dod usuário,
ái
• Não pode receber comandos.

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 41


A classe Alert
• Comportamento da janela Alert:
ƒ modal – a janela permanece vísivel até o
usuário oprimir o botão Aceptar,
Aceptar
ƒ timed – a janela desaparece após
transcorer um tempo definido

• Para definir o comportamento usamos o


método setTimeout():
ƒ Alert.FOREVER – modal
ƒ tempo em milisegundos – timed

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 42


A classe Alert
• Exemplo:
Alert alert;
alert = new Alert("Falha",
"Perda do enlaçe de comunicação!",
null, null);
alert.setTimeout(Alert.FOREVER);
display.setCurrent(alert);

• Por defeito o AMS determina a tela que será


mostrada após
p a jjanela de alerta ((depende
p da
implementação).

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 43


A classe Alert
• Podemos gerenciar qual será a próxima tela
utilizando duas alternativas:
ƒ Chamar o método setCurrent() com dois
parâmetros:
display.setCurrent(alert, form);

ƒ Chamar o método setCurrent() duas vezes:


display.setCurrent(alert);
display.setCurrent(form);

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 44


A classe Alert
• Exemplo:
ƒ Mostrando janelas de alerta em uma
aplicação,
aplicação
ƒ Um menu de comandos,,
ƒ Carregando uma imagem,
ƒ MIDlet Name: Mostra Janelas de Alerta,
ƒ MIDlet Class: ShowAlert.
ShowAlert

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 45


A classe Form
• A classe Form (formulário) é um contêiner para que
outros objetos apareçam na tela simultaneamente,
• Qualquer objeto derivado da classe Item deve ser
mostrado dentro de um formulário,
• Os formulários contam com barras de rolagem que
aparecem se o tamanho dos objetos excede o
tamanho da tela,
tela
• Ao inserirmos um objeto em um formulário um índice
i t i é atribuído
inteiro t ib íd ao objeto
bj t (começa
( com zero),
)
• Este índice pode ser utilizado para gerenciar os
objetos,
Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 46
A classe Form
• Objetos
j podem ser colocados no formulário
p
utilizando dois métodos:
ƒ insert() – coloca o objeto em uma posição
específica enviada como parámetro,
parámetro
void insert(int index, Item item);

ƒ append() – insere o objeto após o último


colocado e retorna o índice do objeto,
int append(Item item);

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 47


A classe Form
• Objetos inseridos em um formulário podem ser
manipulados utilizando os métodos:
ƒ set() – substitui a instancia da classe Item
especificado em index pelo novo objeto
enviado como parâmetro,
p ,
void set(int index, Item item);

ƒ delete() – remove do formulario o objeto


especificado pelo index,
void delete(int index);
ƒ deleteAll()
() – remove todos os objetos
j do
formulário.
Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 48
A classe Form
• Exemplo:
ƒ Ilustramos o funcionamento dos métodos
da classe Forms,
Forms
ƒ Gerenciamento de Itens no formulário,,
ƒ MIDlet Name: Formularios com Itens,
ƒ MIDlet Class: CreatingFormWithItems.

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 49


A classe ChoiceGroup
p
• Esta classe deriva da classe Item,
• É utilizada para mostrar check boxes e radio
buttons,
• Geralmente check boxes e radio buttons são
mostrados
t d em grupos,
• Ocasionalmente um check box pode aparecer
isolado,
• Check boxes:
ƒ permitem seleção múltipla,
ƒ utilizados em opções não excluintes,
excluintes
Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 50
A classe ChoiceGroup
p
• Radio buttons:
ƒ apenas um elemento pode ser escolhido,
ƒ usar p
para mostrar elementos excluintes,,

• Um objeto
j ChoiceGrouppppode aparecer
p em dois
formatos (Choice Type):
ƒ EXCLUSIVE – uma única escolha é possível,
possível os
elementos são mostrados como radio buttons,
ƒ MULTIPLE – várias árias escolhas são permitidas
(inclusive zero), elementos são mostrados como
check boxes.
Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 51
A classe ChoiceGroup
p
• Para recuperar as escolhas do usuário utilizamos
os métodos getSelectedFlags() e getSelectedIndex(),

• getSelectedFlags():
ƒ retorna um vetor booleano contendo o estado de
cada membro do ChoiceGroup,
ƒ o vetor deve ser percorrido para determinar as
opções selecionadas,
ƒ pode ser utilizados com check boxes e radio groups.

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 52


A classe ChoiceGroup
p
• getSelectedIndex():
ƒ retorna o índice do objeto selecionado,
ƒ apropriado para radio buttons.

• Para ggerenciar manipular


p as escolhas de um objeto
j
ChoiceGroup podemos utilizar eventos Command
[actionCommand()] ou eventos de estado
[itemStateChange()],

• O uso de radio butons e o método itemStateChange()


f i ilustrado
foi il t d no exemplo
l Radio_Group_Listener.
Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 53
A classe ChoiceGroup
• Exemplo:
ƒ Ilustramos a criação e manipulação de
check boxes,
boxes
ƒ Gerenciamento de Itens no formulário,,
ƒ MIDlet Name: Uso de Check Boxes,
ƒ MIDlet Class: CheckBoxes.

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 54


A classe ChoiceGroup
• Exemplo:
ƒ Ilustramos a criação e manipulação de
check boxes,
boxes
ƒ Gerenciamento de Itens no formulário,,
ƒ MIDlet Name: Uso de Check Boxes,
ƒ MIDlet Class: CheckBoxes.

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 55


A classe DateField
• A classe DateField representa um campo para
apresentação
t ã e edição
di ã de
d data
d t e/ou
/ hora,
h
• Para instanciarmos um j
objeto DateField
utilizamos os seguintes construtores:
public DateField(String label, int mode)
public DateField(String label, int mode,
TimeZone timezone)

ƒ label – texto de rótulo


ƒ mode – modo de exibição
ƒ timezone – indica o formato (geralmente GMT)
Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 56
A classe DateField
• Modos de exibição:
ƒ DATE – somente
t a data
d t
ƒ TIME – somente a hora
ƒ DATE_TIME – Data e hora

• Exemplos:
DateField datefield = new DateField("Today",
DateField.DATE);

DateField datefield = new DateField("Time",


DateField.TIME,
timeZone);

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 57


A classe DateField
• Atribuimos um valor a um objeto DateField
usando
d o método
ét d setDate(),
tD t ()
() requer
• O método setDate() q uma instancia da
classe Date() como parâmetro
void
id setDate(Date
tD t (D t ddate)
t )

• Para inicializar um objeto com a data/hora


corrente do dispostivo:
DateField datefield = new DateField(“Tempo corrente:”
corrente:”,
DateField.DATA_TIME);
Date date = new Date(System.currentTimeMillis());
d t fi ld
datefield.setDate(date);
tD t (d t )

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 58


A classe DateField
• Para recuperar o valor de um objeto DateField
usamos o método
ét d getDate(),
tD t ()
Date getDate()

• Uma única instancia DateField pode ser


utilizada
tili ada para manipular
manip lar a Data e a Hora em
uma aplicação,
• Para modificar/ler o modo de exibição usamos:
void
id setInputMode(int
t t d (i t mode)
d )

int getInputMode()

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 59


A classe DateField
• Exemplo:
ƒ Ilustramos a manipulação de objetos
DateField,
DateField
ƒ Mostra como lêr a data e hora corrente do
dispositivo,
ƒ MIDlet Name: Manipulando Campos Data,
ƒ MIDlet Class: ManipulateDateField.
ManipulateDateField

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 60


A classe Gauge
• Cria um elemento gráfico para mostrar o
estado
t d ou andamento
d t de
d um processo (barra
(b
de progresso),
p g )
• Não existe uma ligação direta entre o andamento
do processo e o estado do objeto Gauge,
Gauge
• O desenvolvedor deve elaborar uma rotina para
monitorar o processo e fazer o acoplamento com o
objeto
j Gauge,
g
• As características gráficas do Gauge dependem da
implementação
implementação.
Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 61
A classe Gauge
• Construtor:
public
bli GGauge(String
(St i l
label,
b l bboolean
l i
interactive,
t ti
int maxValue, int iniValue)

• label
l b l - texto
t t dod rótulo
ót l do
d objeto,
bj t
• interactive - modo de interação
ƒ true - o usuário pode alterar o valor corrente
ƒ false - o usuário não pode alterar o valor
corrente
• maxValue -valor máximo do intervalo
• iniValue -valor
valor inicial do Gauge
Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 62
A classe Gauge
• Tipos possíveis:
Interativo
Intervalo definido
Não interativo Incremental
Intervalo indefinido
C tí
Contínuo

• Interativo:
ƒ Escala que permite a interação do usuário
ƒ O usuário ajustando o som do dispositivo

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 63


A classe Gauge
• Não interativo com intervalo definido:
ƒ Barra de progresso
ƒ Para o processamento de um cálculo ou download
donde se conhece o número de passos envolvidos

• Não interativo com intervalo indefinido incremental:


ƒ Para o p
processamento de atividade q
que o p
progresso
g
pode ser verificado,
ƒ download de um arquivo com tamanho não
conhecido

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 64


A classe Gauge
• Não interativo com intervalo indefinido contínuo:
ƒ Para o processamento de atividade que o
progresso não pode ser verificado,
ƒ tentativa de conexão com uma rede wireless.
• Para interagir com objetos Gauge temos os
métodos:
ƒ setValue(int Val) – coloca o valor corrente do objeto
para Val, estabelece o estado do objeto,
ƒ getValue() – retorna o valor corrente do objeto,
ƒ g
getMaxValue()
() – retorna um inteiro com o valor
máximo do objeto.
Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 65
A classe Gauge
• Os objetos Gauge com intervalo indefinido são
gerenciados
i d através
t é ded estados
t d dod objeto,
bj t

• Temos os seguintes valores para parâmetros do


método setValue():
ƒ CONTINOUS_IDLE – contínuo, inativo,
ƒ CONTINOUS_RUNNING – contínuo, em
execução,
ç
ƒ INCREMENTAL_UPDATING – incremental, ativo
ƒ INCREMENTAL_IDLE
INCREMENTAL IDLE – incremental,
incremental inativo
Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 66
A classe Gauge
• Exemplo:
ƒ Ilustra os diferentes tipos de Gauge e seu
uso em uma interface,
interface
ƒ MIDlet Name: Manipulando
p Gauge,
g ,
ƒ MIDlet Class: FormGauge.

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 67


Nova Interface Listener
• Permite manipular comandos associados a Items
de fórmulario.
Interface
CommandListener
ItemStateListener
ItemCommandListener

Método
é
commandAction(Comand c, Displayable d)
itemStateChange(Item i)
CommandAction(Comand c, Item i)

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 68


A classe StringItem
• O objetivo da classe StringItem é mostrar um
texto que não poder ser manipulado diretamente
pelo usuário,
usuário
• Os objetos
j desta classe não g
geram eventos,,
• Objetos desta classe não poderm receber
escutadores,
• Estes objetos podem ser modificados por instruções
da MIDlet em tempo de execução,

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 69


A classe StringItem
• Construtor:
public StringItem(String label
label, String text)
public StringItem(String label, String text, int appMode)
ƒ label - texto do rótulo
ƒ text - texto do conteúdo
ƒ appMode - a aparência do ítem, ítem depende da
implementação, muitos dispositivos desconsideram
este
t parâmetro
â t (WTK).
(WTK)
• Valores de appMode:
ƒ Item.PLAIN
ƒ Item.HYPERLINK
ƒ Item.BUTTON
Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 70
A classe StringItem
• Para manipular um objeto StringItem temos os
métodos:
ƒ void setText(String text)
ƒ S
String getText()
()
ƒ void setLabel(String text)
ƒ String getLabel()
• Exemplo:
p
ƒ Ilustra o uso de objetos StringItem, jogo de
perguntas e respostas.
respostas
ƒ MIDlet Name: Formulario com StringItem,
ƒ MIDlet Class: StringItemExample.
Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 71
A classe TextField
• A classe é utilizada para capturar textos
digitados pelo usuário,
• Um objeto TextField pode ter uma linha ou
múltiplas
últi l linhas,
li h
• O número de linhas depende do numero
máximo de caracteres do objeto definido no
construtor,

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 72


A classe TextField
• Construtor
public
bli TTextField(String
tFi ld(St i l
label,
b l St
String
i t
text,
t
int maxSize, int constraints)

ƒ label - texto do rótulo


ƒ text - texto inicial do conteúdo do objeto
ƒ maxSize - o número máximo de caracteres para o
conteúdo do objeto,
objeto (é uma requisição ao AMS
pode não ser atendida)
ƒ constraints - especifica o tipo de caracteres que o
objeto irá a manipular..

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 73


A classe TextField
• Valores das constrains:
ƒ ANY,
ANY caracteres de qualquer tipo
ƒ NUMERIC, caracteres numéricos (inteiros)
ƒ DECIMAL , caracteres numéricos e ponto decimal
(ponto flutuante)
ƒ EMAILADDR,
EMAILADDR permite a entrada de um email
válido,
ƒ PHONENUMBER,
PHONENUMBER permite it a entrada
t d d
de um
número de telefone valido*,
ƒ URL, permite a entrada de uma URL
ƒ PASSWORD, Oculta os caracteres digitados.

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 74


A classe TextField
• Para recuperar o conteúdo de um objeto temos
os métodos:
ƒ String getString(), retorna os caracteres digitados
pelo usuário
á em uma String,
S
ƒ void getChars(char[] data), cópia o contéudo do
TextField para o vetor data.
• Para colocar caracteres em um TextField temos
os métodos:
ƒ void setChars(char[] data,
data int offset,
offset int length),
length)
substitui os caracteres do objeto com os contidos
no array.
Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 75
A classe TextField
• Para colocar caracteres em um TextField temos os
métodos …
ƒ void setString(String text), substitui o conteúdo do
objeto pela String text.
text
ƒ void insert(String src, int position), insere a String src
no objeto sem substituir o conteúdo atual,
atual
ƒ void insert(char[] data, int offset, int length,
int position),
position) insere um subconjunto do array na
posição position, não substitui o conteúdo corrente.
• Para
P remover caracteres
t em um TextField
T tFi ld temos:
t
ƒ void delete(int offset, int length)

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 76


A classe TextField
• Exemplo:
ƒ Ilustra o uso de objetos TextField,
TextField
ƒ Tela de login,
ƒ Manipulação de senhas,
ƒ MIDlet Name: Formulario de login,
login
ƒ MIDlet Class: ManipulateTextFields.

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 77


A classe List
• Um objeto List é utilizado para mostrar uma lista
d itens
de it ao usuário,
ái
• Permite ao usuário selecionar uma ou múltiplas
instancias,
• Os elementos podem ser textos ou imagens,
imagens
• Existem três formatos possíveis para a lista:
ƒ radio buttons (EXCLUSIVE)
ƒ check boxes (MULTIPLE)
ƒ menu (IMPLICIT)

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 78


A classe List
• Quais as diferencias entre a classe List e classe
Choice Group?
ƒ Objetos List não precisam de contêiner, podem
ser mostrados diretamente,
ƒ Comandos podem ser associados ao objeto List,
ƒ O gerenciamento de eventos:
o List – comandos, setCommandListener,
commandAction
o ChoiceGroup p – eventos de estado,
setItemStateListener, itemStateChange
ƒ Estas características nos p
permitem escolher uma
ou outra alternativa em nossa aplicação.
Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 79
A classe List
• Construtor:
public List (String title, int type)
public List (String title, int type,
String[] strElem, Image[] imgElem)

ƒ title - define o título da janela


ƒ type - especifica o tipo da lista
ƒ strElem - texto associado à cada elemento da
lista
ƒ imgElem – imagem associada à cada elemento
d lista
da li t

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 80


A classe List
• Os elementos de uma lista podem ser
gerenciados utilizando os mesmos métodos do
objeto ChoiceGroup:
public void set(int elemNum, String
stringPart, Image imagePart)
public void insert (int elemNum, String
stringPart, Image imagePart)
public int append (String stringPart,
Image imagePart)
public void delete (int elemNum)
public void deleteAll()

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 81


A classe List
• Para manipular as escolhas do usuário temos os
métodos:
public String getString(int elemNum)
public Image getImage (int elemNum)
public boolean isSelected (int index)
public int size()
public int getSelectedIndex()
public void setSelectedIndex(int index)
public void getSelectedFlags(boolean[]
selectedArrayReturn)
public void setSelectedFlags(boolean[]
selectedArrayReturn)
EXCLUSSIVE, IMPLICIT
C
Command.SELECT_COMMAND
d SELECT COMMAND IMPLICIT

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 82


A classe List
• Exemplo:
ƒ Tipos de objetos List
ƒ Manipulação de objetos List
ƒ Navegação em múltiplas telas
ƒ MIDlet Name: Uso de Listas,
ƒ MIDlet Class: ListExamples.

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 83


A classe TextBox
• TextBox é uma janela que permite que o usuário
informe uma sequência de caracteres,
caracteres
• Construtor:
public
bli TTextBox(String
tB (St i titl
title, St
String
i t
text,
t
int maxSize, int constraints)
ƒ title – define o título da janela
ƒ text - texto inicial do conteúdo do objeto
ƒ maxSize - o número máximo de caracteres para o
conteúdo do objeto, (é uma requisição ao AMS
poded nãoã ser atendida)
t did )
ƒ constraints - especifica o tipo de caracteres que o
objeto irá a manipular..
Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 84
A classe TextBox
• Um TextBox tem o mesmo comportamento e
suporta os mesmos métodos que o objeto
TextField,
• As diferencias entre um TextBox e um TextField
são:
ƒ O TextBox é uma janela, pode ser mostrado
diretamente na tela,
tela processa comandos,
comandos
ƒ Um TextField é um item de formulário, deve
ser mostrado dentro de um contêiner,
processa eventos de estado.
p

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 85


A classe Ticker
• Um Ticker é uma seqüência de caracteres que
roda continuamente no topo de um objeto
Displayable,
• Construtor:
public Ticker(String text)

ƒ text – texto a ser mostrado no objeto,


• O atributo text de um ticker pode ser recuperado
usando o método:
String getString()

• O atributo text p
pode ser modificado p
pelo método
void setString(String text)
Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 86
A classe Ticker
• Um ticker é um atributo de um objeto
Displayable,
Displayable
• Para associar um ticker a um objeto usamos o
método
void setTicker(Ticker ticker)

• Para remover um ticker de um objeto usamos


void setTicker(null)

• Para recuperar o valor de um atributo ticker de


um objeto usamos:
Ticker getTicker()
• Igual null sem ticker, Diferente de null com ticker
Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 87
A classe Ticker
• Exemplo:
ƒ Instanciar objetos Ticker
ƒ Manipulação de objetos Ticker
ƒ Asociar/liberar Ticker a objetos
ƒ MIDlet Name: Uso de Tickers,
ƒ MIDlet Class: UsesTicker.

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 88


Não foram estudados
• Layout de formulários
• A classe ImageItem
• A classe
l G hi
Graphics

• Estes conteúdos devem ser complementados


pelos estudantes.

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 89


Resumo – Uso de GUI
1. Declara uma referência ao objeto,
2. Instanciar (construir) o objeto,
3 Associar
3. A i comandos
d ou estados
t d ao objeto,
bj t
4. Mostrar o objeto na tela,
5. Receber as ações do usuário,
6. Processar as ações do usuário.

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 90


Exercícios
1. Modifique a MIDlet MyItemListener para que
apenas a cor selecionada apareça na
mensagem de texto.
2. Modifique a MIDlet ShowAlert para mostrar
quatro mensagens de alerta (utilize imagens
)
diferentes):
ƒ uma alerta modal com imagem,
ƒ uma alerta modal sem imagem,
imagem
ƒ uma alerta temporal com imagem,
ƒ uma alerta temporal sem imagem,
Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 91
Exercícios
3. Modifique a MIDlet CreatingFormWithItems para
que apenas as opções permitidas do menu
apareçam
p ç visíveis,, evitando erros ao oprimir
p a
opção incorreta.
4 Modifique
4. a MIDlet CheckBoxes para se
nenhuma opcão for selecionada, apareça a
mensagem: Não foram selecionadas categorias.
5 Modifique a MIDlet StringItemExample para
5.
incluir tres perguntas e tres respostas na
sequencia correta.
Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 92
Exercícios
6. Modifique a MIDlet ManipulateTextField para
verificar se a senha digitada é correta, isto é
confere com uma senha estabelecida na
MIDlet, mostre a mensagem de boas vindas ou
uma mensagem de erro, segundo corresponda.
q
7. Modifique a MIDlet ListExamples
p para
p
apresentar comandos de Voltar que permitam
retornar
t a tela
t l anterior.
t i P
Prove que todas
t d as
alternativas de navegação são validas.

Prof. Dany S. Dominguez/dany@labbi.uesc.br Tema 2 – Slide 93

Vous aimerez peut-être aussi