programa expresso de capacitação módulo j2me aula 4 – interface de alto e baixo nível

28
Programa Expresso de Capacitação Módulo J2ME Aula 4 – Interface de alto e baixo nível

Upload: internet

Post on 19-Apr-2015

104 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Programa Expresso de Capacitação Módulo J2ME Aula 4 – Interface de alto e baixo nível

Programa Expresso de CapacitaçãoMódulo J2ME

Aula 4 – Interface de alto e baixo nível

Page 2: Programa Expresso de Capacitação Módulo J2ME Aula 4 – Interface de alto e baixo nível

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 3: Programa Expresso de Capacitação Módulo J2ME Aula 4 – Interface de alto e baixo nível

Agenda

• Interface gráfica de baixo nível• Overview• Tratamento de eventos

• Timer e TimerTask

Page 4: Programa Expresso de Capacitação Módulo J2ME Aula 4 – Interface de alto e baixo nível

Interface de baixo nível“Às vezes, a ignorância é uma bênção”

Page 5: Programa Expresso de Capacitação Módulo J2ME Aula 4 – Interface de alto e baixo nível

Overview• Graphics

• Canvas

• Tratamento de eventos

Page 6: Programa Expresso de Capacitação Módulo J2ME Aula 4 – Interface de alto e baixo nível

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 7: Programa Expresso de Capacitação Módulo J2ME Aula 4 – Interface de alto e baixo nível

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 8: Programa Expresso de Capacitação Módulo J2ME Aula 4 – Interface de alto e baixo nível

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 9: Programa Expresso de Capacitação Módulo J2ME Aula 4 – Interface de alto e baixo nível

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 10: Programa Expresso de Capacitação Módulo J2ME Aula 4 – Interface de alto e baixo nível

Canvas – Sistema de Coordenadas

Page 11: Programa Expresso de Capacitação Módulo J2ME Aula 4 – Interface de alto e baixo nível

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 12: Programa Expresso de Capacitação Módulo J2ME Aula 4 – Interface de alto e baixo nível

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 13: Programa Expresso de Capacitação Módulo J2ME Aula 4 – Interface de alto e baixo nível

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 14: Programa Expresso de Capacitação Módulo J2ME Aula 4 – Interface de alto e baixo nível

Tratamento de eventos• Não é necessário criar um listener• public void keyPressed(int keyCode ) • public void keyRepeated(int keyCode ) • public voidkeyReleased(int keyCode ) • public void pointerPressed(int x, int y ) • public void pointerDragged(int x, int y ) • public void pointerReleased(int x, int y )

Page 15: Programa Expresso de Capacitação Módulo J2ME Aula 4 – Interface de alto e baixo nível

Game Actions• Aplicações portáveis que necessitem de teclas

direcionais e eventos relacionados a jogos devem preferencialmente utilizar game actions a keyCodes

• Game actions• UP, DOWN, LEFT, RIGHT, FIRE, GAME_A,

GAME_B, GAME_C, GAME_D

Page 16: Programa Expresso de Capacitação Módulo J2ME Aula 4 – Interface de alto e baixo nível

Tratamento de eventos• int getGameAction(int keyCode) • Retorna a gameAction da tecla especificada

• int getKeyCode(int gameAction) • Retorna o keyCode de uma gameAction

• String getKeyName(int keyCode) • Retorna o nome da tecla especificada

Page 17: Programa Expresso de Capacitação Módulo J2ME Aula 4 – Interface de alto e baixo nível

ExemploPublic void keyPressed(int keyCode) {

switch (keyCode) {case Canvas.KEY_NUM5:

// tratamento da tecla 5break;

case Canvas.KEY_NUM9:// tratamento da tecla 9 break;

}}

Page 18: Programa Expresso de Capacitação Módulo J2ME Aula 4 – Interface de alto e baixo nível

Exercício• 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 19: Programa Expresso de Capacitação Módulo J2ME Aula 4 – Interface de alto e baixo nível

Manipulando imagens• Só pra relembrar• 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 20: Programa Expresso de Capacitação Módulo J2ME Aula 4 – Interface de alto e baixo nível

Exercício• 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 21: Programa Expresso de Capacitação Módulo J2ME Aula 4 – Interface de alto e baixo nível

Timer e TimerTask• Facilitam a execução de tarefas em segundo

plano• Baseado no conceito de agendamento de

tarefas, onde um cronômetro dispara uma tarefa a ser executada, uma única vez ou periodicamente• Timer: O agendador de tarefas• TimerTask: Executa uma tarefa

Page 22: Programa Expresso de Capacitação Módulo J2ME Aula 4 – Interface de alto e baixo nível

Timer• Fornece seis métodos para agendamento de

tarefas

• Dois deles para tarefas de execução única• schedule(TimerTask task, long delay)• schedule(TimerTask task, Date time)

Page 23: Programa Expresso de Capacitação Módulo J2ME Aula 4 – Interface de alto e baixo nível

Timer – Tarefas Repetitivas• void schedule(TimerTask task, long delay, long

period)• void schedule(TimerTask task, Date firstTime,

long period)• void scheduleAtFixedRate(TimerTask task,

long delay, long period)• void scheduleAtFixedRate(TimerTask task,

Date firstTime, long period)

Page 24: Programa Expresso de Capacitação Módulo J2ME Aula 4 – Interface de alto e baixo nível

TimerTask• Classe que representa uma Task

• Possui três métodos• abstract void run()• public boolean cancel()• public long scheduledExecutionTime()

Page 25: Programa Expresso de Capacitação Módulo J2ME Aula 4 – Interface de alto e baixo nível

Utilizando Timer e TimerTask

1. Crie um Timer

2. Crie uma classe que estende de TimerTask

3. Escreva o método run dessa nova classe

4. Agende o timer passando a nova classe como parâmetro

Page 26: Programa Expresso de Capacitação Módulo J2ME Aula 4 – Interface de alto e baixo nível

Exemplo// Cria o TimerTimer tm = new Timer();

// Cria uma TaskTodoTask tt = new TodoTask();

// Agenda o Timer para executar a task em 1000mstm.schedule(tt, 1000);

...private class TodoTask extends TimerTask {

public final void run() {// Faz alguma coisa

}}

Page 27: Programa Expresso de Capacitação Módulo J2ME Aula 4 – Interface de alto e baixo nível

Código exemplo• http://www.cin.ufpe.br/~ela/PEC/

TimerTaskMIDlet.java

Page 28: Programa Expresso de Capacitação Módulo J2ME Aula 4 – Interface de alto e baixo nível

Referências

• Core J2ME

• Site da Sun

• Wireless Programming with J2ME: Cracking the code, ISBN: 0-7645-4885-9