Você está na página 1de 17

Java Manaus

http://www.javamanaus.com.br

Um pouco mais que Hello World High-level API


Leonardo Gall
Este artigo tem como o funcionamento da High-level API de uma maneira simples e prtica, mostrando e explicando passo a passo tudo o que foi feito.

High-level API
Em High-level API no permitido o desenho na tela, como feito na Low-Level API (Canvas) onde possvel fazer desenhos no formato que voc desejar, mas na High-level API temos algumas facilidades como, Alert, List, TextBox e Form que herdam da classe screen, veja no grfico abaixo como composta a High-Level API.
1 1 1 *

MIDlet

Display

Displayable Low-Level API

High-Level API

Screen

Canvas

Alert

List

TextBox

Form

Item

ChoiceGroup

DateField

Gauge

ImageItem

StringItem

TextField

Grupo de Usurios Java http://www.guj.com.br Pgina 1

Java Manaus

http://www.javamanaus.com.br

Form
Antes de qualquer coisa, vale relembrar como funciona o ciclo de vida de uma MIDlet, que foi visto no artigo Um pouco mais que Hello World que est em Estados de uma MIDlet na pgina 5 (este artigo encontra-se em http://www.guj.com.br/user.article.list.chain), este ciclo possui pauseApp(), startApp() e destroyApp(), esta estrutura fica da seguinte forma:
//Arquivo: HelloWorld.java import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; public class HelloWorld extends MIDlet { protected void startApp() throws MIDletStateChangeException {} protected void pauseApp() {} protected void destroyApp(boolean arg0) throws MIDletStateChangeException {} }

Implementando um Form Agora iremos implementar uma pequena aplicao J2ME, ser um Form contendo alguns itens, para um melhor entendimento veja a figura na pgina anterior e observe que cada Form pode possuir vrios itens, estes itens podem ser: ChoiceGroup, DateField, Gauge, ImageItem, StringItem e TextField; Veja a seguir uma estrutura bsica de uma aplicao com Form, observe o funcionamento do Display e do Form:
//Arquivo: HelloWorld.java import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Form; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; public class HelloWorld extends MIDlet { //Declarao do Form - no Form que sero adicionados os tens citados acima //atravz do append //So eles: ChoiceGroup, DateField, Gauge, ImageItem, StringItem e TextField Form form; //Declarao do Display - gerencia o que aparece na tela do dispositivo (celular) Display display; protected void startApp() throws MIDletStateChangeException { //Obtem o objeto Display que utilizado pela aplicao para ser mostrada //na tela do dispositivo display = Display.getDisplay(this); //Criando um form com o ttulo passado por argumento form = new Form("Hello Form"); //Adicionado um texto simples no form especificado form.append("Primeiro Append"); //Faz com quem o objeto Form fique vispivel na tela do dispositivo display.setCurrent(form); } protected void pauseApp() { } protected void destroyApp(boolean arg0) throws MIDletStateChangeException { } }

Grupo de Usurios Java http://www.guj.com.br Pgina 2

Java Manaus
Resultado:

http://www.javamanaus.com.br

OBS
Os Appends devem ser chamados antes do display.setCurrent(form), pois ele pega o contedo do Form e mostra no Display. Caso o Eclipse acuse algum erro de import assim que voc adicionou algum item, coloque o cursor sobre o item sublinhado que apresenta o erro e pressione Ctrl+1 que ele mostrar a lista de imports possveis.

Grupo de Usurios Java http://www.guj.com.br Pgina 3

Java Manaus

http://www.javamanaus.com.br

Entendendo cada Item A partir de agora ser mostrado o funcionamento de cada Item do Form, sero mostrados todos os seus argumentos com uma breve descrio de cada um, sero mostrados tambm seus construtores e alguns exemplos. ChoiceGroup uma lista de escolha, podendo ser mltiplo ou exclusivo. Argumentos Tipo String label int choiceType Descrio Ttulo do ChoiceGroup. tipo de escolha, pode ser: Choice.EXCLUSIVE Escolha exclusiva, no notifica o listener que este item foi selecionado. Choice.MULTIPLE Escolha mltipla, no notifica o listener que este(s) item(ns) foi(ram) selecionado(s). Choice.POPUP Escolha exclusive, mostra um item de cada vez. Elementos do item de escolha. Imagens para os itens.

String[] stringElements Image[] imageElements

Construtores
ChoiceGroup(String label, int choiceType)

Cria um novo ChoiceGroup vazio, apenas com o ttulo e tipo de escolha.


ChoiceGroup(String label, int choiceType, String[] stringElements, Image[] imageElements)

Cria um novo ChoiceGroup, especificando seu ttulo, tipo de escolha, ttulo do elemento e uma imagem para este elemento. Exemplo:
String[] stringElements = {"Primeiro", "Segundo", "terceiro"}; ChoiceGroup choiceGroup = new ChoiceGroup("Label:", Choice.MULTIPLE, stringElements, null); form.append(choiceGroup);

Grupo de Usurios Java http://www.guj.com.br Pgina 4

Java Manaus

http://www.javamanaus.com.br

DateField Field para data e/ou hora. Argumentos Tipo String label int mode TimeZone timeZone Descrio Ttulo do DateField. DateField.DATE Mostra apenas a data. DateField.TIME Mostra apenas a hora. DateField.DATE_TIME Mostra a data e a hora. Pacific Standard Time zone (PST).

Construtores
DateField(String label, int mode)

Cria um field Data com uma String e seu modo de exibio (Data, Hora e Data_Hora).
DateField(String label, int mode, TimeZone timeZone)

Cria um field Data com uma String, seu modo de exibio (Data, Hora e Data_Hora) e o TimeZone. Exemplos:
DateField dateField = new DateField("Label:", DateField.DATE_TIME); form.append(dateField);

TimeZone timeZone = TimeZone.getTimeZone("PST"); DateField dateField = new DateField("Label:", DateField.DATE_TIME, timeZone); form.append(dateField);

Grupo de Usurios Java http://www.guj.com.br Pgina 5

Java Manaus

http://www.javamanaus.com.br

Gauge Barra de progresso, possui 2 tipos, o interativo onde o usurio pode alter-lo e o no interativo, que no permite alterao do usurio. Argumentos Tipo String label boolean interactive int maxValue int initialValue Descrio Ttulo do Gauge. Informa se interativo ou no. Valor mximo ou INDEFINITE. vai de 0 ao valor mximo, podendo ser: CONTINUOUS_IDLE INCREMENTAL_IDLE CONTINUOUS_RUNNING INCREMENTAL_UPDATING Se o maxValue for indefinido.

Construtor
Gauge(String label, boolean interactive, int maxValue, int initialValue)

inicial.

Cria um gauge com um label, opo de intereativo e no interativo, valor mximo e valor

Exemplo:
Gauge gauge = new Gauge("Label:", true, 20, 1); form.append(gauge);

Grupo de Usurios Java http://www.guj.com.br Pgina 6

Java Manaus

http://www.javamanaus.com.br

ImageItem Mostra uma imagem instanciada anteriormente. Argumentos Tipo String label Image img int layout Descrio Label (ttulo) do ImageItem. Imagem instanciada. Os tipos de layout podem ser: Item.LAYOUT_CENTER, Item.LAYOUT_DEFAULT, Item.LAYOUT_LEFT, Item.LAYOUT_NEWLINE_AFTER, Item.LAYOUT_NEWLINE_BEFORE e Item.LAYOUT_RIGHT. Texto usado no lugar da imagem. Define a aparencia, podendo ser Item.PLAIN, Item.HYPERLINK ou Item.BUTTON.

String altText int appearanceMode

Construtores ImageItem(String label, Image img, int layout, String altText) Cria uma imagem definindo o seu Label, imagem, tipo de layout e texto alternativo. ImageItem(String label, Image img, int layout, String altText, int appearanceMode) Cria uma imagem definindo o seu Label, imagem, tipo de layout, texto alternativo e aparncia. Exemplos:
ImageItem imageItem = null; try { Image image = Image.createImage("/face.png"); imageItem = new ImageItem("label:", image, Item.LAYOUT_DEFAULT, "Alt text"); } catch (IOException e) { e.printStackTrace(); } form.append(imageItem); //---------------------------------------------ImageItem imageItem = null; try { Image image = Image.createImage("/face.png"); imageItem = new ImageItem("label:", image, Item.LAYOUT_DEFAULT, "Alt text", Item.HYPERLINK); } catch (IOException e) { e.printStackTrace(); } form.append(imageItem);

OBS:
Para que uma imagem seja adicionada em seu MIDlet voc ter que adicionar estas imagens na pasta res da sua aplicao e adicionar a seguinte linha no seu Ant (em empacotar) para que essas imagens sejam empacotadas junto com o seu JAR:
<jar destfile="${project.dir}\bin\${project.name}.jar"> <fileset dir="${project.dir}\class"/> <fileset dir="${project.dir}\bin"/> <fileset dir="${project.dir}\res"/> </jar>

Grupo de Usurios Java http://www.guj.com.br Pgina 7

Java Manaus

http://www.javamanaus.com.br

StringItem Mostra um texto simples. Argumentos Tipo String label String text int appearanceMode Descrio Ttulo do StringItem. Texto simples. Define a aparencia, podendo ser: Item.PLAIN Texto simples Item.HYPERLINK Em formato de Hyperlink Item.BUTTON Em foma de boto.

Construtores
StringItem(String label, String text)

Cria um item dcom ttulo e um texto simples.


StringItem(String label, String text, int appearanceMode)

Cria um item de texto simples


TextField(String label, String text, int maxSize, int constraints)

Cria um item dcom ttulo, um texto simples e define a aparncia.

Exemplos:
StringItem stringItem = new StringItem("Label:", "Texto do StringItem"); form.append(stringItem); StringItem stringItem = new StringItem("Label:", "Texto do StringItem", Item.PLAIN); form.append(stringItem);

Grupo de Usurios Java http://www.guj.com.br Pgina 8

Java Manaus

http://www.javamanaus.com.br

Command
A partir de agora iremos utilizar os Commands para fazer com que a nossa aplicao fique mais interativa, para isto nossa MIDlet dever implementar CommandListener, ficar da seguinte forma:
public class HelloWorld extends MIDlet implements CommandListener {}

Como voc est implementando o CommandListener a sua aplicao ter que ser informada, para isso utilize a linha de comando abaixo:
form.setCommandListener(this);

Da mesma maneira que utilizvamos o append no form utilizaremos o addCommand, siga os mesmos princpios, utilizando antes do setCurrent, alm disso um Form j deve existir. Antes de adicionar um Command em seu Form, voc ter que cri-lo, veja um exemplo na linha abaixo:
Command command = new Command("Alert", Command.OK, 0);

Voc tem que implementar o mtodo commandAction, que o responsvel pelo tratamento dos Commands, este mtodo possui dois argumentos, o Command e um Displayable, como segue:
public void commandAction(Command arg0, Displayable arg1) { //Nesta condio verifica se seu Command foi clicado if (arg0 == nomeDoSeuCommand){ System.out.println(Testando o Command); } }

OBS: Para ver o resultado do System.out.println clique com o boto diretito no emulador e escolha View Mult Documment View View Output Window. Relembrando que estamos vendo em um emulador da Siemens, conforme abordado no artigo Um pouco mais que Hello World citado no incio deste artigo.

Grupo de Usurios Java http://www.guj.com.br Pgina 9

Java Manaus
Command

http://www.javamanaus.com.br

atravs dele que os botes so controlados. Argumentos Tipo String label int commandType Descrio Ttulo do label que aparecer na interface do usurio. Tipo do commando, podendo ser: Command.BACK Volta para uma tela anterior. Command.CANCEL Sai da operao antes de iniciar algo. Command.EXIT Faz com que o MIDlet termine todas as operaes. Command.HELP Solicitao de ajuda. Command.ITEM Utiliza algum comando referente ao item do componente utilizado. Command.OK Solicita a confirmao do usurio para uma operao. Command.SCREEN Operao referente ao Display atual. Command.STOP Parar um processo. A prioridade define a posio do Command. Label (texto) curto. Label (texto) longo.

int priority String shortLabel String longLabel Construtores

Command(String label, int commandType, int priority)

Cria um novo objeto Command com um texto, tipo do comando e prioridade.


Command(String shortLabel, String longLabel, int commandType, int priority)

Cria um novo objeto Command com um texto curto, um texto longo, tipo do commando e prioridade.

Para adicionar o command interface use:


form.addCommand(command);

OBS: o addCommand deve ser asociado a uma interface. Para sua aplicao responder aos comandos do Command voc deve utilizar o setCommandListener() associado ao seu display, veja com mais detalhes abaixo. Exemplo
Command command = new Command("Ok", Command.OK, 0); protected void startApp() throws MIDletStateChangeException { display = Display.getDisplay(this); form = new Form("Hello Form"); form.addCommand(command); form.append(stringItem); form.setCommandListener(this); display.setCurrent(form); } // chamado quando algum command acionado em tempo de execuo public void commandAction(Command arg0, Displayable arg1) { if (arg0 == nomeDoSeuCommand){ System.out.println(Testando o Command); } }

Grupo de Usurios Java http://www.guj.com.br Pgina 10

Java Manaus

http://www.javamanaus.com.br

Alert
Os Alerts so utilizados como telas de advertncia, a partir de agora veremos como funcionam. Alert Mensagens de alerta. Argumentos Tipo String title String alertText Image alertImage AlertType alertType Descrio Texto de ttulo Contedo do Alert Imagem do Alert Os tipode do Alert podem ser: AlertType. ALARM Para mostrar um alerta sobre algo. AlertType. CONFIRMATION Para confirmao do usurio. AlertType. ERROR Para mostrar uma mensagem de Erro. AlertType. INFO Para mostrar alguma informao. AlertType. WARNING Mensagem de perigo.

Construtores
Alert(String title)

Cria um novo objeto contendo apenas o ttulo (String).


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

Cria um novo objeto contendo, um ttulo, texto do contedo, imagem e o tipo do Alert. Exemplo
Command command = new Command("Alert", Command.OK, 0); Alert alert; protected void startApp() throws MIDletStateChangeException { display = Display.getDisplay(this); form = new Form("Hello Form"); Image image = null; try { image = Image.createImage("/face.png"); alert = new Alert("Ttulo", "Texto", image, AlertType.INFO); } catch (IOException e) { e.printStackTrace(); } form.setCommandListener(this); form.addCommand(command); display.setCurrent(form); } public void commandAction(Command arg0, Displayable arg1) { if (arg0 == command){ display.setCurrent(alert); } }

Grupo de Usurios Java http://www.guj.com.br Pgina 11

Java Manaus

http://www.javamanaus.com.br

List
O List como o prprio nome j diz, uma lista! Ela pode ter imagens e textos ou somente textos. List Lista uma seqncia de textos e/ou imagens. Argumentos Tipo String title int listType Descrio Texto Simples contendo o ttulo do List Os tipods de List poder ser: List.IMPLICIT List.EXCLUSIVE List.MULTIPLE Array de texto dos itens do List Array de Imagem dos itens do List

String[] stringElements Image[] imageElements Construtores


List(String title, int listType)

Cria uma nova lista vazia, especificando apenas o seu ttulo e seu tipo.
List(String title, int listType, String[] stringElements, Image[] imageElements)

Cria uma nova lista, especificando o ttulo, tipo, um array de Strings e um array de imagens. Exemplo
protected void startApp() throws MIDletStateChangeException { display = Display.getDisplay(this); String[] itens = {"Um", "Dois", "Trs"}; Image image[] = {null, null, null}; try { image[0] = Image.createImage("/face0.png"); image[1] = Image.createImage("/face1.png"); image[2] = Image.createImage("/face2.png"); } catch (IOException e1) { e1.printStackTrace(); } List list = new List("Ttulo", List.IMPLICIT, itens, image); display.setCurrent(list); }

Grupo de Usurios Java http://www.guj.com.br Pgina 12

Java Manaus

http://www.javamanaus.com.br

TextBox
TextBox um campo de texto que ocupa a tela toda. Argumentos Tipo String title String text int maxSize int constraints Descrio Ttulo do TextBox Contedo do TextBox Tamanho mximo Formato para entrada dos dados podem ser TextField.ANY, TextField.CONSTRAINT_MASK, TextField.DECIMAL, TextField.EMAILADDR, TextField.INITIAL_CAPS_SENTENCE, TextField.INITIAL_CAPS_WORD, TextField.NON_PREDICTIVE, TextField.NUMERIC, TextField.PASSWORD, TextField.PHONENUMBER, TextField.SENSITIVE, TextField.UNEDITABLE e TextField.URL

Construtor TextBox(String title, String text, int maxSize, int constraints) Cria um novo TextBox com uma String de ttulo, String do contedo, tamanho mximo e o tipo de entrada. Exemplo
Display display; protected void startApp() throws MIDletStateChangeException { display = Display.getDisplay(this);

TextBox textBox = new TextBox("Ttulo", "Contedo...", 20, TextField.ANY); display.setCurrent(textBox);


}

Grupo de Usurios Java http://www.guj.com.br Pgina 13

Java Manaus

http://www.javamanaus.com.br

Trocando de Display (Tela)


Agora ser mostrada de uma maneira simples como trocar de Diplay em uma aplicao, ou seja, sair de um List para um Form, ou ento sair de um Form para um TextBox. Abaixo segue imagens/cdigo de como ficar o exemplo de um List com trs opes Form, TextBox e Alert, cada uma delas vela a um Display diferente, tudo seguindo o que j foi visto anteriormente.

Este o primeiro Display, um List que contm 3 itens, cada item tem um ndice correspondente (Form = 0, TextBox = 1 e Alert = 2), ao clicar em Select o mtodo commandAction() ser chamado e nele esto sendo feitas comparaes para saber qual dos itens foi selecionado.

Para chegarmos ao Display ao lado, selecionamos o item Form do primeiro Display (List) e clicamos em Select, com isso o commandAction() chamado e como o list.getSelectedIndex() igual a 0, o Form passou a ser o novo Display e o novo commandListenner. Quando clicar no Command Voltar o commandAction() ser chamado novamente, s que neste momento o Display passa a ser o List novamente.

Para chegarmos ao Display ao lado, selecionamos o item TextBox do primeiro Display (List) e clicamos em Select, com isso o commandAction() chamado e como o list.getSelectedIndex() igual a 1, o TextBox passou a ser o novo Display e o novo commandListenner. Quando clicar no Command Voltar o commandAction() ser chamado novamente, s que neste momento o Display passa a ser o List novamente.

Para chegarmos ao Display ao lado, selecionamos o item Alert do primeiro Display (List) e clicamos em Select, com isso o commandAction() chamado e como o list.getSelectedIndex() igual a 2, o Alert passou a ser o novo Display. Quando clicar no Command Voltar o commandAction() ser chamado novamente, s que neste momento o Display passa a ser o List novamente.

import javax.microedition.lcdui.Alert; Grupo de Usurios Java http://www.guj.com.br Pgina 14

Java Manaus
import import import import import import import import import import import

http://www.javamanaus.com.br javax.microedition.lcdui.AlertType; javax.microedition.lcdui.Command; javax.microedition.lcdui.CommandListener; javax.microedition.lcdui.Display; javax.microedition.lcdui.Displayable; javax.microedition.lcdui.Form; javax.microedition.lcdui.List; javax.microedition.lcdui.TextBox; javax.microedition.lcdui.TextField; javax.microedition.midlet.MIDlet; javax.microedition.midlet.MIDletStateChangeException;

public class HelloWorld extends MIDlet implements CommandListener { Display display; Form form; Command command = new Command("Alert", Command.OK, 0); Command commandBack = new Command("Voltar", Command.BACK, 1); Alert alert; List list; TextBox textBox; protected void startApp() throws MIDletStateChangeException { display = Display.getDisplay(this); //O primeiro Display ir mostrar o List que dar acesso aos demais String[] stringElements = { "Form", "TextBox", "Alert" }; list = new List("Ttulo", List.IMPLICIT, stringElements, null); list.setCommandListener(this); display.setCurrent(list); //Implementao do Form form = new Form("Hello Form"); form.append("Testando o Form"); form.addCommand(commandBack); //Implementando o TextBox textBox = new TextBox("Hello TextBox", "Testando o TextBox", 20, TextField.ANY); textBox.addCommand(commandBack); //Implementando o Alert alert = new Alert("Hello Alert", "Testando o Alert", null, AlertType.INFO); } protected void pauseApp() { } protected void destroyApp(boolean arg0) throws MIDletStateChangeException { } public void commandAction(Command c, Displayable d) { //Verifica se o Command selecionado commandBack responsvel por //atribuir o List como Display if (c == commandBack) { //Informa que a partir de agora o List "ouvir" o Command list.setCommandListener(this); //seta o List como Display display.setCurrent(list); } else { if (list.getSelectedIndex() == 0) { //Informa que a partir de agora o Form "ouvir" o Command form.setCommandListener(this); //seta o Form como Display display.setCurrent(form); } else if (list.getSelectedIndex() == 1) { //Informa que a partir de agora o TextBox "ouvir" o Command textBox.setCommandListener(this); //seta o TextBox como Display display.setCurrent(textBox); } else { //seta o Alert como Display display.setCurrent(alert); Grupo de Usurios Java http://www.guj.com.br Pgina 15

Java Manaus

http://www.javamanaus.com.br

} } } }

Grupo de Usurios Java http://www.guj.com.br Pgina 16

Java Manaus

http://www.javamanaus.com.br

Interfaces do usurio
O foco deste tpico fazer com o leitor entenda como funciona a High-Level API, mostrando exemplos e explicando passo a passo o que significa cada item.

Concluso
Este artigo a continuao de um outro artigo encontrado no GUJ (www.guj.com.br) Artigos J2ME Um pouco mais que Hello World e tem como objetivo mostrar de uma maneira simples como fazer uma aplicao J2ME.
Leonardo Gall (leonardo_esposti_gall@yahoo.com.br) trabalha no desenvolvimento de aplicativos para dispositivos mveis.

Grupo de Usurios Java http://www.guj.com.br Pgina 17

Você também pode gostar