Programa Expresso de Capacitação Módulo J2ME

Slides:



Advertisements
Apresentações semelhantes
APLICAÇÕES DE LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS COMPONENTES GUI – PARTE I Prof. Thiago Pereira Rique
Advertisements

Programação Orientada a Objetos*
Paulo Marques Hernâni Pedroso
Eventos Marco Antonio, Arquiteto de Software – TJDF Novembro/2005
Capítulo 1 Introdução.
Prof. Alessandro J. de Souza
Prof. Thiago Pereira Rique
Programação Básica em Java
Programação Concorrente
Instrutor: Nilo Menezes
Tutorial I: Criando a interface de uma aplicação em Java
Aula de reposição Prof. Grace e Ângela
Classes e objetos Arrays e Sobrecarga
Classes e objetos P. O. O. Prof. Grace.
Estrutura de Dados em Java
Paradigmas de Linguagens de Programação Paradima da Programação Orientada à Objetos Professor: Armando Hage Belém-2008.
Componentes GUI GUI – Grafical User Interface – São construídas a partir de componentes GUI chamados de controles ou widgets (windows gadgets – engenhocas.
CRIANDO OBJETOS EM JAVA
Curso de extensão em Desenvolvimento Web
Prof. Afonso Ferreira Miguel, MSc
Programação Orientada a Objetos com Java
Aula prática 13 Orientação a Objetos – C++ Parte 1
Capítulo 2 Java Servlets.
Interfaces.
Programação I Aula 2 (Métodos)
OPERADORESOPERADORES SCJP – Otimize-TI. Operadores Java Resultado: Maioria das operações é um booleano ou numérico. Não podem ser sobrecarregados (Existem.
Linguagem de Programação JAVA
Introdução a aplicativos Java
Programa Expresso de Capacitação Módulo J2ME Aula 5 – Record Management System.
Programa Expresso de Capacitação Módulo J2ME Aula 4 – Interface de alto e baixo nível.
Jornada de Cursos – J2ME Aula 2 – Configuração.
Programa Expresso de Capacitação Módulo J2ME Aula 1 – Overview e Conceitos básicos.
Enviando dados com interface Classe Form – é um repositório de controles, sendo que apenas um Form pode ser visto de cada vez. Cada objeto da classe Form.
Orientação a Objetos Parte I
Pilhas Profa. Nádia Félix.
Aulas 2 e 3 – Java – Prof. Marcelo Heitor # O método main e argumentos na linha de comando; # Fluxo padrão de entrada e saída; # A classe JOptionPane;
Listas Simplesmente Encadeadas
MINI CURSO J2ME Vinícius Maran SEMINÁRIO REGIONAL DE INFORMÁTICA 2008.
POO Interface Gráfica - Swing
UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng
Orientação a Objetos usando Java
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Java Kickstart, day 2 Semelhanças com linguagem C.
Aula Prática 4 Monitoria IP/CC (~if669).
Curso básico j2me Bruno Pereira Carlos Santos
Programação para Web Unidade 06 – Java Beans e BDs Prof.: Henrique Santos.
Estrutura de Controle em JAVA
Classes Abstratas e Interface
Módulo 9 Strings , Coleções e I/O
Introdução PLB-II (Java) – Prof. Alberto  Mais componentes da GUI.
Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Programação para Dispositivos Móveis Prof. Wallace Borges Cristo.
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
Seminários.reply JavaME César Delmas – Hially Sá –
Faculdade Pitágoras – Campus Fadom.  Display  Cada MIDlet tem UMA referência para um objeto Display  Esse objeto pode recuperar informações sobre.
Jornada de Cursos - J2ME Aula 3 – MIDP. Pausa para reflexão "Sem esforço não há progresso, mas com esforço também não há progresso” Ryotan TokudaRyotan.
Bruno Inojosa MCP .NET Framework
Modificadores Programação II.
Programação Gráfica em Java Introdução
GOTO. Project treinamento expresso j2me Luiz Carlos d´Oleron lcadb at cin.ufpe.br.
Seminários.reply Introdução a JavaME Guilherme Carvalho.
Faculdade Pitágoras – Campus Fadom.  Permite uma seleção à partir de um conjunto de opções  Método append permite adição de itens em seu conteúdo. 
Array e ArrayList LPOO – 01/09/14.
Curso Básico de Android
Linguagem de Programação
Faculdade Pitágoras – Campus Fadom.  A classe Form é utilizada para a criação de formulários que agregam conjuntos de itens (subclasse de Item), os.
CURSO JAVA BÁSICO Módulo 9 – slide 1 Módulo 10 Threads.
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
Linguagem de Programação – Aula 04 Prof. Me. Ronnison Reges Vidal.
Transcrição da apresentação:

Programa Expresso de Capacitação Módulo J2ME Aula 3 – MIDP

Pausa para reflexão "Sem esforço não há progresso, mas com esforço também não há progresso” Ryotan Tokuda, Mestre Zen

Agenda Overview MIDP Tratamento de eventos High-level API de Componentes de interface com o usuário - javax.microeidtion.lcdui.*

Overview MIDP Elemento-chave no mundo J2ME Conectividade Junto com CLDC Conectividade Interface gráfica rica Rich User Interface Capabilities: MIDP applications provide the foundation for highly graphical and intuitive applications. The graphical user interface is optimized for the small display size, varied input methods, and other native features of modern mobile devices. MIDP provides intuitive navigation and data entry by taking full advantage of phone keypads, extra buttons such as arrow keys, touch screens, and small QWERTY keyboards. MIDP applications are installed and run locally, can operate in both networked and unconnected modes, and can store and manage persistent local data securely.   Extensive Connectivity: MIDP enables developers to exploit the native data network and messaging capabilities of mobile information devices. It supports leading connectivity standards, including HTTP, HTTPS, datagrams, sockets, server sockets, and serial port. MIDP also supports the Short Message Service and Cell Broadcast Service capabilities of GSM and CDMA networks, through the Wireless Messaging API (WMA) optional package. Multimedia and Game Functionality: MIDP is ideal for building portable games and multimedia applications. A low-level user-interface API complements the high-level UI API, giving developers greater control of graphics and input when they need it. A game API adds game-specific functionality, such as sprites and tiled layers, which take advantage of devices' native graphics capabilities. Built-in audio provides support for tones, tone sequences, and WAV files. In addition, developers can use the Mobile Media API (MMAPI) optional package to add video and other rich multimedia content to MIDP applications. Over-the-Air-Provisioning: A major benefit of MIDP is its capability to deploy and update applications dynamically and securely, over the air. End-to-End Security: MIDP provides a robust security model that complies with open standards and protects the network, applications, and mobile information devices. HTTPS support enables applications to use existing standards such as SSL and WTLS to send and receive encrypted data.

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

MIDlets Componentes do MIDlet Java Application Manager: JAD – usado pelo JAM. Possui informações a respeito do JAR. JAR – Código compilado, junto com recursos. Java Application Manager: Software responsável por instalar, remover e executar MIDlets Dependente de dispositivo e de fabricante Mais de um MIDlet pode estar em um JAR.

Estrutura de um MIDlet import javax.microedition.midlet.MIDlet; public class helloWorld extends MIDlet { public helloWorld () { System.out.println("helloWorld()"); } // obrigatorio protected void startApp() { System.out.println("startApp()"); protected void pauseApp() { System.out.println("pauseApp()"); protected void destroyApp(boolean arg0) { System.out.println("destroyApp()");

Ciclo de vida de um MIDlet PAUSA Depois da chamada do construtor e antes da inicialização pelo JAM Durante o processo de execução ATIVO MIDlet em execução DESTRUÍDO Desligada pelo JAM Libera todos os recursos alocados

Hierarquia de classes

Display Gerenciador de tela que controla o que é mostrado no dispositivo Recupera informações sobre a tela atual (cores suportadas, resolução, etc) Objeto único para cada MIDlet Não é instanciado

Usando Display import javax.microedition.lcdui.Display; import javax.microedition.midlet.MIDlet; public class DisplayStats extends MIDlet { private Display display; // construtor public DisplayStats() { display = Display.getDisplay(this); ... }

Display – métodos principais static Display getDisplay(MIDlet m) Retorna o objeto display deste MIDlet Displayable getCurrent() Retorna o objeto displayable corrente void setCurrent(Displayable d) Mostra um objeto displayable int numColors() Retorna o número de cores disponíveis

Displayable Objeto que pode ser visto num dispositivo Screen Canvas Objetos Displayable para Interface alto nível Canvas baixo nível

Voltando ao Diagrama ...

Enfim um Hello World import javax.microedition.lcdui.Display; import javax.microedition.lcdui.TextBox; import javax.microedition.midlet.MIDlet; public class HelloMIDlet extends MIDlet { private Display myDisplay; private TextBox myTextBox; public HelloMIDlet() { myDisplay = Display.getDisplay(this); myTextBox = new TextBox("", "Hello World", 11, TextField.ANY); } public void startApp() { this.myDisplay.setCurrent(myTextBox); public void pauseApp() {} public void destroyApp(boolean unconditional) {}

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

Interface de alto nível Tratamento de eventos Interface de alto nível

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

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

Objetos Command Contém informações sobre um evento Podem ser considerados como “botões” Soft keys Teclas O processo de eventos Criação do Objeto Command Adicionar o comando a um Displayable Adicionar um receptor (Listener) ao Displayable

Objetos Command Argumentos Constante 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 Útil para a organização dos comandos em Menus e de botões de software na tela

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

Exemplo (faltam uns ajustes) Mão na massa: Classe Form é um Displayable private Form fmMain; private Command cmExit; fmMain = new Form(“Curso CITi"); ... cmExit = new Command("Exit", Command.EXIT, 1); // 1º passo fmMain.addCommand(cmExit); //2º passo fmMain.setCommandListener(this); // 3º passo public void commandAction(Command c, Displayable s) { if (c == cmExit) { destroyApp(true); notifyDestroyed(); }

Exercício Crie um MIDlet que contenha um Form e controle três botões: Form fmMain = new Form(“Tela Principal”); Lembre-se que Form é um objeto Displayable “exit”, usado para sair do MIDlet “hello” imprime “Hello World” “back” volta para a tela principal, após o usuário ter visualizado a mensagem

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)

ItemStateListener O receptor de eventos relacionados a objetos Item Método a ser sobrescrito void itemStateChanged () No mesmo modelo dos objetos Command Este método é chamado quando o “item” tiver sofrido alteração que gere evento

Exemplo df = new DateField("Data :", DateField.DATE); // cria o objeto Item df = new DateField("Data :", DateField.DATE); df.setDate(new java.util.Date()); // adiciona o objeto a um displayable formMain.append(df); // seta o receptor formMain.setItemStateListener(this);

Exercício Crie um MIDlet com um DateField e que imprime “Item State Changed ...” quando seu estado é alterado Para esta implementação pode ser usado System.out.println()

Interface gráfica de alto nível

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

Screen Classe progenitora Descendente direta de Displayable Métodos principais: String getTitle () void setTitle(String title) Ticker getTicker () void setTicker (Ticker t)

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

Form - Exemplo Form fm = new Form(“Formulario”); ... fm.append(item) // adiciona um item size = fm.size() // retorna o tamanho // seta o receptor para um evento com Item fm.setItemStateListener (ItemStateListener)

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

Item - Exemplo private Form fmMain; // formulario private DateField dfToday; // o objeto DateField ... fmMain = new Form(“My Form"); // instancia de Form dfToday = new DateField("Today:", DateField.DATE); // DateField fmMain.append(dfToday); // adiciona Item (DateField) ao Form fmMain.setItemStateListener(this); // Gerencia os eventos de Form public void itemStateChanged(Item item) { if (item == dfToday) }

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

StringItem - Exemplo private Form fmMain; // formulario Private StringItem siLogin; // o objeto StringItem ... fmMain = new Form(“PEC"); // instancia de Form siLogin = newStringItem(“Login: ", “ela”); // StringItem fmMain.append(siLogin); // adiciona Item (StringItem) ao Form

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

Exercício Construa um MIDlet simples que possui dois botões (next e exit). Na primeira tela é exibido um StringItem com o label “Dados 1/2” e o texto “Nome: José” Next: passa para uma outra tela, onde o label é “Dados 2/2” e texto “Fone: 555-5555” Exit: sai da aplicação em qualquer das “duas” telas

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?

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)

DateField - Exemplo // criação do objeto DateField DateField df = new DateField(“Data:”, DateField.DATE); ... java.util.Date dataAtual = new java.util.Date (); df.setDate(dataAtual); // seta a data do DateField … df.getDate (); // recupera a data atual

DateField

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

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

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

Gauge

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

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

TextField - Exemplo // cria um novo TextField com máscara para número de telefone tfPhone = new TextField("Phone:", "", 10, TextField.PHONENUMBER); … // recupera o texto tf.getChars(arrayDestino); // seta um String tf.setString(“Curso J2ME”);

TextField

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

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)

ChoiceGroup

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

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

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

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

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

List - Exemplo www/~ela/PEC/ListDemo.java

List

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

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

TextBox - Exemplo textBox tb; ... // instância de TextBox tb = new TextBox(“TextBox”,””,20,TextField.ANY); // seta o display display.setCurrent(tb); … // recupera o texto tb.getChars(arrayDestino);

TextBox

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

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

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)

Alert

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

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

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

Exercício Acrescente ao exercício de TextField um Alert ao abrir a aplicação antes da tela inicial e um Alert caso o par login e senha não seja igual a “adm” e “123” respectivamente.

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)

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

Referências Wireless Programming with J2ME: Cracking the code, ISBN: 0-7645-4885-9 Tutoriais da Sun