1.41k likes | 1.59k Views
Curso básico j2me. Bruno Pereira (bpe@cin.ufpe.br) Carlos Santos (cesps@cin.ufpe.br). 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
E N D
Curso básico j2me Bruno Pereira (bpe@cin.ufpe.br) Carlos Santos (cesps@cin.ufpe.br)
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 • Sobre as aulas • Dúvidas ... todos nós temos • Avaliação (alunos) • Projeto • Avaliação (instrutores)
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
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
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
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
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
Enfim ... MIDP • Mobile Information Device Profile
Ambiente de desenvolvimento • Eclipse IDE v3.0 • Sun Wireless Toolkit 2.1 • Plugin EclipseME 0.7.5
Ambiente de desenvolvimento • Configurando o plugin
Ambiente de desenvolvimento • Configurando o Toolkit
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
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
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
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()"); } // obrigatorio protected void pauseApp() { System.out.println("pauseApp()"); } // obrigatorio protected void destroyApp(boolean arg0){ System.out.println("destroyApp()"); } }
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
Usando o Display public class Test_Display extends MIDlet { private Display display; // construtor public Test_Display() { 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 ()
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)
Displayable • Objeto que pode ser visto num dispositivo • Screen • Objetos Displayable para Interface alto nível • Canvas • Objetos Displayable para Interface baixo nível
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.
Displayable • Ver se vai entrar com os Command... metodos...
Enfim um Hello World public class tratamentoEventos extends MIDlet{ private Display display; private TextBox tb; // Construtor public tratamentoEventos() { display = Display.getDisplay(this); tb = new TextBox("","Hello World",11,0); } // O inicio da aplicacao protected void startApp() { this.display.setCurrent(tb); } }
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 • 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
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 (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º passo fmMain.setCommandListener(this); // 3º passo ... public void commandAction(Command c, Displayable s) { if (c == cmExit) { destroyApp(true); notifyDestroyed(); } }
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
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 () • Este método é chamado quando o “item” tiver sofrido alteração que gere evento
Exemplo // 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);
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()
Interface de alto nível Parte 1
Overview • Screen • Form • Item • StringItem • DateField • Gauge • TextField • Choice e ChoiceGroup • Image e ImageItem
Screen • Classe progenitora • Descendente direta de Displayable • Métodos principais: • String getTitle () • void setTitle(String title) • Ticker getTicker () • void setTicker (Ticker t)