curso básico j2me
DESCRIPTION
Curso básico j2me. Bruno Pereira ([email protected]) Carlos Santos ([email protected]). Ementa. Visão geral MIDLet Tratamento de eventos Interface alto nível + Registros Interface baixo nível Boas práticas. Metodologia. Sobre o curso Slides “on demand” Referência: Core j2me - PowerPoint PPT PresentationTRANSCRIPT
![Page 2: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/2.jpg)
Ementa Visão geral MIDLet Tratamento de eventos Interface alto nível + Registros Interface baixo nível Boas práticas
![Page 3: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/3.jpg)
Metodologia Sobre o curso
Slides “on demand” Referência: Core j2me
Sobre as aulas Dúvidas ... todos nós temos
Avaliação (alunos) Projeto
Avaliação (instrutores)
![Page 4: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/4.jpg)
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 5: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/5.jpg)
Overview Por que J2ME? Mudanças trazidas Dispositivos alvo Restrições { memória,
processamento } Mais informações
http://java.sun.com/j2me/reference/faqs/index.html
![Page 6: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/6.jpg)
Arquitetura
![Page 7: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/7.jpg)
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
Exemplo: CLDC e CDC
![Page 8: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/8.jpg)
Profiles Parte “high level” Extensão da configuração Provê bibliotecas para
implementação de aplicações para um dado tipo de dispositivo
Exemplo: MIDP
![Page 9: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/9.jpg)
Máquina Virtual KVM (Kilo Virtual Machine)
Desenvolvida pela Sun MicroSystems CLDC estabelece uma “classe” de
dispositivos nos quais uma KVM roda “Existe vida” além da KVM
Dados comparativos 40 – 80 Kb (KVM) 20 – 40 Kb (heap) 16 bits a 25 MHz
![Page 10: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/10.jpg)
J2ME
![Page 11: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/11.jpg)
Enfim ... MIDP Mobile Information Device Profile
![Page 12: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/12.jpg)
MIDP – Hierarquia de classes
![Page 13: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/13.jpg)
Ambiente de desenvolvimento Eclipse IDE v3.0 Sun Wireless Toolkit 2.1 Plugin EclipseME 0.7.5
![Page 14: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/14.jpg)
Ambiente de desenvolvimento Configurando o plugin
![Page 15: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/15.jpg)
Ambiente de desenvolvimento
![Page 16: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/16.jpg)
Ambiente de desenvolvimento
![Page 17: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/17.jpg)
Ambiente de desenvolvimento Configurando o Toolkit
![Page 18: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/18.jpg)
Ambiente de desenvolvimento
![Page 19: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/19.jpg)
Pausa para reflexão
![Page 20: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/20.jpg)
O MIDlet Aplicativo Java para MIDP Gerenciador de Aplicativos
Software responsável por instalar, remover e executar MIDlets
Dependente de dispositivo e implementado pelo fabricante
Um ou mais MIDlets podem ser empacotados num JAR
![Page 21: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/21.jpg)
O MIDlet JAD (Java Application Descriptor)
Arquivo plain/text usado pelo Gerenciador de Aplicativos
Fornece informações sobre o arquivo JAR Fornece meios para se passar
parâmetros para o MIDlet Campos obrigatórios: MIDlet-Name,
MIDlet-Version, MIDlet-Vendor, MIDlet-n, MIDlet-Jar-URL, MIDlet-Jar-Size
![Page 22: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/22.jpg)
Ciclo de vida do MIDlet PAUSA
Depois da chamada do construtor e antes da inicialização pelo Gerenciador
Durante o processo de execução ATIVO
MIDlet em execução Durante o processo de execução
DESTRUÍDO Desligada pelo Gerenciador Libera todos os recursos alocados
![Page 23: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/23.jpg)
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 24: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/24.jpg)
Ciclo de vida - fluxograma
![Page 25: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/25.jpg)
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 MIDlet Não é instanciado
![Page 26: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/26.jpg)
Usando o Displaypublic class Test_Display extends MIDlet {private Display display;
// construtorpublic Test_Display() {display = Display.getDisplay(this);...}...}
![Page 27: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/27.jpg)
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 28: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/28.jpg)
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 29: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/29.jpg)
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 30: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/30.jpg)
Displayable Screen
TextBox List Alert Form (ChoiceGroup, DateField, TextField,
Gauge, ImageItem, StringItem) OBS: ticker – variável que pode ter ou
não em um Displayable; texto que corre continuamente na tela.
![Page 31: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/31.jpg)
Displayable Ver se vai entrar com os
Command... metodos...
![Page 32: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/32.jpg)
Enfim um Hello Worldpublic class tratamentoEventos extends MIDlet{
private Display display;private TextBox tb;
// Construtorpublic tratamentoEventos() {display = Display.getDisplay(this);tb = new TextBox("","Hello World",11,0);}// O inicio da aplicacaoprotected void startApp() {this.display.setCurrent(tb);}
}
![Page 33: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/33.jpg)
Pausa para reflexão
![Page 34: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/34.jpg)
Tratamento de eventos
Interface de alto nível
![Page 35: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/35.jpg)
Overview Quadro geral Objetos Command Objetos Item Command e CommandListener Item e ItemStateListener
![Page 36: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/36.jpg)
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 37: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/37.jpg)
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 38: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/38.jpg)
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 39: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/39.jpg)
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 40: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/40.jpg)
Exemplo (façam rodar =D)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 41: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/41.jpg)
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
![Page 42: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/42.jpg)
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 43: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/43.jpg)
ItemStateListener O receptor de eventos
relacionados a objetos Item Método a ser sobrescrito
void itemStateChanged () Este método é chamado quando o
“item” tiver sofrido alteração que gere evento
![Page 44: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/44.jpg)
Exemplo// cria o objeto Itemdf = new DateField("Data :",
DateField.DATE);df.setDate(new java.util.Date());
// adiciona o objeto a um displayableformMain.append(df);
// seta o receptorformMain.setItemStateListener(this);
![Page 45: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/45.jpg)
Exercitando ... 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 46: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/46.jpg)
Pausa para reflexão
![Page 47: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/47.jpg)
Interface de alto nível
Parte 1
![Page 48: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/48.jpg)
Overview Screen Form Item StringItem DateField Gauge TextField Choice e ChoiceGroup Image e ImageItem
![Page 49: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/49.jpg)
((
![Page 50: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/50.jpg)
Screen Classe progenitora Descendente direta de Displayable Métodos principais:
String getTitle () void setTitle(String title) Ticker getTicker () void setTicker (Ticker t)
![Page 51: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/51.jpg)
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 52: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/52.jpg)
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 Itemfm.setItemStateListener (ItemStateListener)
![Page 53: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/53.jpg)
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 54: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/54.jpg)
Item - Exemploprivate Form fmMain; // formularioprivate DateField dfToday; // o objeto DateField...fmMain = new Form("Core J2ME"); // 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 55: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/55.jpg)
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 56: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/56.jpg)
StringItem - Exemploprivate Form fmMain; // formularioPrivate StringItem siLogin; // o objeto StringItem...fmMain = new Form(“Jornada CITi"); // instancia
de FormsiLogin = newStringItem(“Login: ", “cesps”); //
StringItem...fmMain.append(siLogin); // adiciona Item
(StringItem) ao Form...
![Page 57: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/57.jpg)
Alternativa ao StringItem...private Form fmMain;int i = fmMain.append(“Login: cesps”);...StringItem tmp = (StringItem)
fmMain.get(i);...
![Page 58: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/58.jpg)
Exercitando ... 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 59: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/59.jpg)
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 60: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/60.jpg)
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 61: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/61.jpg)
DateField - Exemplo// criação do objeto DateFieldDateField 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 62: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/62.jpg)
DateField
![Page 63: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/63.jpg)
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 64: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/64.jpg)
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 65: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/65.jpg)
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 66: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/66.jpg)
Gauge
![Page 67: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/67.jpg)
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 68: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/68.jpg)
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 69: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/69.jpg)
TextField - Exemplo// cria um novo TextField com máscara para número de telefonetfPhone = new TextField("Phone:", "", 10,
TextField.PHONENUMBER);
…// recupera o textotf.getChars(arrayDestino);…// seta um Stringtf.setString(“Curso J2ME”);…
![Page 70: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/70.jpg)
TextField
![Page 71: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/71.jpg)
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 72: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/72.jpg)
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 73: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/73.jpg)
ChoiceGroup
![Page 74: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/74.jpg)
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 75: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/75.jpg)
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 76: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/76.jpg)
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 77: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/77.jpg)
Interface de alto nível
Parte 2
![Page 78: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/78.jpg)
Overview Quadro Geral List TextBox Alert e AlertType Ticker
![Page 79: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/79.jpg)
Quadro Geral
![Page 80: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/80.jpg)
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 81: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/81.jpg)
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 82: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/82.jpg)
List - Exemplo www/~cesps/ListDemo.java
![Page 83: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/83.jpg)
List
![Page 84: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/84.jpg)
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 85: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/85.jpg)
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 86: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/86.jpg)
TextBox - ExemplotextBox tb;...// instância de TextBoxtb = new TextBox(“TextBox”,””,20,TextField.ANY);...// seta o displaydisplay.setCurrent(tb);…// recupera o textotb.getChars(arrayDestino);
![Page 87: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/87.jpg)
TextBox
![Page 88: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/88.jpg)
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 89: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/89.jpg)
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 90: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/90.jpg)
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 91: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/91.jpg)
Alert
![Page 92: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/92.jpg)
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 93: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/93.jpg)
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 94: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/94.jpg)
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 95: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/95.jpg)
Exercitando ... 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 96: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/96.jpg)
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 97: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/97.jpg)
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 98: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/98.jpg)
Pausa para reflexão
![Page 99: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/99.jpg)
Record Management System Gereciamento de registros
persistentes Registro
Identificador ligado a um array de bytes Equivalente a armazenamento em
arquivo de J2SE Classes para armazenar, recuperar,
enumerar, comparar e filtrar dados não-voláteis
![Page 100: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/100.jpg)
RMS Armazém de registros (RecordStore)
Nomenclatura Até 32 caracteres UNICODE (16 bits)
ID de registro Dado1 Array de bytes2 Array de bytes... ..
![Page 101: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/101.jpg)
RMS Compartilhamento de Registros
CONJUNTO 1
CONJUNTO 2
![Page 102: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/102.jpg)
RMS Informações adicionais
Número da versão: um valor inteiro que é incrementado a cada modificação do conteúdo do armazém
Indicação de data/hora: última modificação do armazém
A existência dos registros está limitada à do MIDlet que os criou
![Page 103: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/103.jpg)
RMS - Métodos static RecordStore openRecordStore(String nome, boolean
criarSeNecessario);
void closeRecordStore();
void delete recordStore(String nome);
int addRecord(byte[] dados, int offset, int numBytes);
void setRecord(int recordId, byte[] novosDados, int offset, int numBytes);
byte[] getRecord(int recordId);
int getRecord(int recordId, byte[] buffer, int offset);
![Page 104: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/104.jpg)
RMS – Métodos (Cont.) Int getNumRecords();
Long getLastModified();
String getName();
addRecordListener(RecordListener listener);
removeRecordListener(RecordListener listener);
![Page 105: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/105.jpg)
RMS - Exemplo...RecordStore rs = null; String nome = “Carlos”;...try { rs = RecordStore.openRecordStore( “meusdados", true ); byte[] recData = nome.getBytes(); rs.addRecord(recData, 0, rec.length); //Grava dados ... //Recupera dados String retorno = new String( rs.getRecord(1) );
} catch( Exception e ) { // tratamento de excessão}
![Page 106: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/106.jpg)
RecordEnumeration Interface que fornece métodos de
movimentação para frente e para trás em registros
Semelhante ao Iterator em J2SE Pode levar em conta filtros (para
pesquisa) e/ou comparadores (para ordenação)
Ex: classificar registros em ordem alfabética
![Page 107: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/107.jpg)
RecordEnumeration
Métodos Principais RecordEnumerator enumerateRecords(RecordFilter
filter, RecordComparator comparator, boolean keepUpdated); *
byte nextRecord(); byte previousRecord(); Boolean hasNextElement(); Boolean hasPreviousElement(); Void keepUpdated(boolean keep);
* Método da classe RecordStore
![Page 108: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/108.jpg)
Exemplo.....RecordEnumeration enum =
re.enumerateRecords(null, null, false);
while ( re.hasNextElement() ) {//armazena o próximo registro em um StringString str = new String(re.nextRecord());… processa algo…
}…
![Page 109: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/109.jpg)
RecordComparator Interface para comparação entre registros
Método a ser implementado Int compare(byte[] rec1, byte[] rec2);
Tipos de RecordComparator EQUIVALENT – rec1 é equivalente a rec2 FOLLOWS – rec1 vem depois de rec2 PRECEDES – rec1 vem antes de rec2
![Page 110: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/110.jpg)
Exemplo...public class Comparador implements RecordComparator {
public int compare(byte rec1, byte rec2) {String str1 = new String(rec1);String str2 = new String(rec2);
int resultado = str1.compareTo(str2);if (resultado == 0) return RecordComparator.EQUIVALENT;else if (result < 0) return RecordComparator.PRECEDES;elsereturn RecordComparator.FOLLOWS;}
}
![Page 111: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/111.jpg)
Exemplo (Cont.)...//Cria um novo comparador para ordenarComparador comp = new Comparador();
//Referencia o comparador ao criar a enumeraçãoRecordEnumeration re = rs.enumerateRecords(null, comp, false);
//Faz a iteração nos registros, que já estarão ordenadosWhile ( re.hasPreviousElement ) {
... String s = new String(re.previousRecord());...
}…
![Page 112: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/112.jpg)
RecordFilter Interface para filtro de registros Apenas os resultados que
correspondem ao critério do filtro, farão parte do conjunto enumerador
Método a ser implementado Boolean matches(byte[] candidate)
![Page 113: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/113.jpg)
Exemplo...class Filtro implements RecordFilter {
private String textoBuscado = null;
public Filtro(String textoBuscado) {//este é o texto a ser pesquisadothis.textoBuscado = textoBuscado.toLowerCase();}
public boolean matches(byte[] candidato) {String str = new String(candidato).toLowerCase();//procura uma correspondênciaif ( textoBuscado != null && str.indexOf(textoBuscado) != -1 ) {return true;} else {return false;}}
}
![Page 114: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/114.jpg)
Exemplo (Cont.)...//Cria um novo filtro de buscaFiltro busca = new Filtro(“Texto a ser buscado”);
//Referencia o filtro ao criar o enumeradorRecordEnumeration re = rs.enumerateRecords(busca, null, false);
/*Se houver pelo menos um registro no conjunto de resultados, uma correspondência foi encontrada*/
if (re.getNumRecords() > 0) {//Manipula os resultados
}…
![Page 115: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/115.jpg)
RecordListener Notificação de que um registro foi
adicionado, removido ou atualizado Ex: Salvar preferências de um usuário
Opera como os outros Receptores de eventos já vistos em aula
Métodos a serem implementados void recordAdded(RecordStore rs, int recordId); void recordChanged(RecordStore rs, int recordId); void recordDeleted(RecordStore rs, int recordId);
![Page 116: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/116.jpg)
RecordListener - Exemplo
![Page 117: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/117.jpg)
Interface de baixo nível
“a ignorância é uma bênção”
![Page 118: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/118.jpg)
Overview Graphics Canvas Tratamento de eventos Boas práticas
![Page 119: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/119.jpg)
Quadro Geral
![Page 120: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/120.jpg)
Graphics Classe que provê métodos simples
de renderização 2D em Canvas Arcos, imagens, linhas, retângulos
e texto podem ser desenhados Não é instanciada diretamente
![Page 121: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/121.jpg)
Graphics Métodos principais
drawArc (int x, int y, int width, int height, int startAngle, int arcAngle)
drawImage(Image img, int x, int y, int anchor) drawLine(int x1, int y1, int x2, int y2) drawString(String str, int x, int y, int anchor) fillArc(int x, int y, int width, int height,
int startAngle, int arcAngle) fillRect(int x, int y, int width, int height)
![Page 122: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/122.jpg)
Graphics Métodos principais - continuação
setClip(int x, int y, int width, int height)
setColor(int red, int green, int blue setFont(Font font) translate(int x, int y)
![Page 123: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/123.jpg)
Canvas Classe que herda de Displayable Representa uma Área na tela que pode
ser livremente desenhada e apagada Fornece métodos para tratamento de
eventos de teclas, “game actions” e “pointer actions”
Usa Graphics para desenho no Canvas O programador cria uma subclasse de
Canvas
![Page 124: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/124.jpg)
Canvas – Sistema de Coordenadas
![Page 125: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/125.jpg)
Canvas Métodos principais
int getGameAction (int keyCode) int getKeyCode(int gameAction) String getKeyName(int keyCode) keyPressed(int keyCode) keyReleased(int keyCode) keyRepeated(int keyCode) paint(Graphics g) repaint()
![Page 126: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/126.jpg)
Canvas - Exemploimport javax.microedition.lcdui.*;import javax.microedition.midlet.*;
public class MyCanvas extends Canvas {
private MIDlet midlet;
public MyCanvas( MIDlet midlet ){ this.midlet = midlet; } protected void paint( Graphics g ){ g.setColor( 255, 255, 255 ); g.fillRect( 0, 0, getWidth(), getHeight() ); g.setColor( 0, 0, 0 ); g.drawString( "Hello there!", getWidth()/2, 0, g.TOP | g.HCENTER ); }}
![Page 127: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/127.jpg)
Canvas – Exemplo (Cont.)public class MyMIDlet extends MIDlet {
private Display display; private MyCanvas canvas; public MyMIDlet(){ display = Display.getDisplay( this ); canvas = new MyCanvas( this ); } ... protected void startApp(){ display.setCurrent( canvas ); } ... public void exit(){ destroyApp( true ); notifyDestroyed(); }}
![Page 128: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/128.jpg)
Tratamento de eventos Key Codes
![Page 129: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/129.jpg)
Exercitando ... Escreva uma aplicação que dado
um evento de pressionamento de uma tecla imprime na tela o nome da tecla pressionada
Lembrando que eventos de tecla pressionada são tratados pelo método keyPressed() de Canvas
![Page 130: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/130.jpg)
Tratamento de Eventos Game Actions
![Page 131: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/131.jpg)
Exercitando ... Escreva um MIDlet que reconhe Game
Actions e desenha uma Imagem indicando qual tecla foi pressionada
Lembrando que as imagens devem ser preferencialmente em formato PNG
As teclas a serem reconhecidas são UP, DOWN, LEFT, RIGHT e FIRE (5)
![Page 132: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/132.jpg)
Manipulando imagens Imagens Estáticas
1. Aloque a imagemImage im = Image.createImage(“/imageTest.png”);
2. Mostre a imagemprotected void paint(Graphics g) {...g.drawImage(im, 10, 10, Graphics.LEFT | Graphics.TOP);...
Imagens Dinâmicas 1. Aloque a imagem
Image im = Image.createImage(80, 20); 2. Crie o conteúdo da imagem (usando arcs, rectangles, lines e text)
// pegue o Graphics do objeto Graphics graphics = im.getGraphics();// desenhe um retangulo preenchidographics.fillRoundRect(0, 0, 50, 50, 20, 20);...
3. Mostre a imagemprotected void paint(Graphics g) {...g.drawImage(im, 10, 10, Graphics.LEFT | Graphics.TOP);...}
![Page 133: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/133.jpg)
Pausa para reflexão
![Page 134: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/134.jpg)
Boas práticas Representam práticas que previnem
contra uma série de erros básicos que podem ocorrer, além de evitar outros inconvenientes
Recomendadas, principalmente em se tratando de dispositivos limitados em termos de memória e processamento
“Nenhum homem é uma ilha”
![Page 135: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/135.jpg)
Boas práticas para o projeto Legibilidade de código
Manter padrão de tabulação Comentários de classe, de métodos e
quando preciso de blocos de código Nomes de variáveis intuitivos Métodos semelhantes agrupados
![Page 136: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/136.jpg)
Boas práticas para o projeto Plataforma (Nokia S40)
Display: 4096 cores, 128 x 128 pixels Tamanho Max. Jar: 64 KB
Exato! Incluindo código e imagens Limitações de som (não toca MIDI ou
MP3) Problemas com alocação de memória
![Page 137: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/137.jpg)
Boas práticas para o projeto Desenvolvimento
Usar Simulador proprietário disponível em http://www.forum.nokia.com (Nokia 3300)
Criação de objetos somente se for necessário (sob demanda)
Evitar sobrecarregar a aplicação com muitos Threads e TimerTasks
Observar bem os métodos startApp() e paint(), geralmente são gargalos
![Page 138: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/138.jpg)
Boas práticas para o projeto Desenvolvimento – continuação
Marcar referências certamente não mais utilizadas para NULL
Otimizar imagens, usando o formato PNG Separar ao máximo a lógica da aplicação
da parte que representa a GUI Evitar uso de Vectors e outras estruturas
dinâmicas, quando possível
![Page 139: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/139.jpg)
Boas práticas para o projeto Gerais
Anote erros conhecidos Consulte sempre a API Não tente reinventar a roda Adquira um pé de coelho, você vai
precisar de um ...
![Page 140: Curso básico j2me](https://reader033.vdocuments.site/reader033/viewer/2022042519/568135f4550346895d9d6719/html5/thumbnails/140.jpg)
Lembrem-se ...
"Sem esforço não há progresso, mas com esforço também não há progresso”
Ryotan Tokuda, Mestre Zen
Alguém enfim descobriu o que isto quer dizer ???