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

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

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